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