hdu4432 Sum of divisors

題目: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");
    }
}



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章