HDU:4432 Sum of divisors

来源:互联网 发布:mac pro 快速回到桌面 编辑:程序博客网 时间:2024/05/17 02:00

这个题只要按照题目模拟就好了,其实挺水的,没什么好分析的。

 

值得注意的地方是计算因子的时候,循环里要给N开方,否则会超时。还有数组不必太开的超大。

 

当时比赛的时候没有做出来,其实我应该早点看rank的,那么多人做出来就说明很简单。现在跟榜也算是一种经验了吧。

 

 

#include<iostream>#include<cstdio>#include<cmath>#include<cstdlib>#include <algorithm>#include<cstring>using namespace std;int num[1000]={0};int fun(int x,int m){    int s=0;    while(x)    {        num[s++]=x%m;        x=x/m;    }    return s;}int compute(int s,int m){    int sum=0;    for(int i=0;i<s;i++)    sum+=num[i]*num[i];    return sum;}int main(){    int n,m;    while(scanf("%d %d",&n,&m)!=EOF)    {        int sum=0;        for(int i=1;i*i<=n;++i)        {            if(n%i==0)            {               sum+=compute(fun(i,m),m);               memset(num,0,sizeof(num));               if(n/i!=i)               {               sum+=compute(fun(n/i,m),m);               memset(num,0,sizeof(num));               }            }        }        memset(num,0,sizeof(num));        int s=fun(sum,m);        for(int i=s-1;i>=0;i--)        {            if(num[i]==10) printf("A");            else if(num[i]==11) printf("B");            else if(num[i]==12) printf("C");            else if(num[i]==13) printf("D");            else if(num[i]==14) printf("E");            else if(num[i]==15) printf("F");            else printf("%d",num[i]);        }        printf("\n");    }    return 0;}

原创粉丝点击