hdu4432 Sum of divisors

来源:互联网 发布:万方数据库能包月吗 编辑:程序博客网 时间:2024/05/16 17:13
题目:mmm is learning division, she's so proud of herself that she can figure out the sum of all the divisors of numbers no larger than 100 within one day!
But her teacher said "What if I ask you to give not only the sum but the square-sums of all the divisors of numbers within hexadecimal number 100?" mmm get stuck and she's asking for your help.
Attention, because mmm has misunderstood teacher's words, you have to solve a problem that is a little bit different.

Here's the problem, given n, you are to calculate the square sums of the digits of all the divisors of n, under the base m.

题解:题目是要求n的因子转换为m进制以后的平方和。并且按照进制输出。数据比较大,直接找因子会超时。找到n的平方根就好了,i是n的因子的话,n/i也是因子。

#include<cstdlib>#include<cstdio>#include<iostream>#include<cstring>using namespace std;int n,m;long long int sum;int a[100];void f(int u){    int t;    while(u)    {        t=u%m;        u/=m;        sum+=t*t;    }}int main(){    while(~scanf("%d%d",&n,&m))    {        sum=0;        for(int i=1;i*i<=n;++i)        {            if(n%i==0)            {                if(i*i==n)                f(i);                else                {                    f(i);                    f(n/i);                }            }        }        int t,tmp=-1;        while(sum)        {            t=sum%m;            sum/=m;            a[++tmp]=t;        }        for(int i=tmp;i>=0;i--)        {            if(a[i]>=10)            printf("%c",'A'+a[i]-10);            else                printf("%d",a[i]);        }        printf("\n");    }}


原创粉丝点击