#include<stdio.h>
#include<math.h>
char bit[100];
char num[16];
void initi()
{
int i,j;
for (i=0;i<=9;i++)
num[i]='0'+i;
for (i=10,j=0;i<=15;i++,j++)
num[i]='A'+j;
}
int hexSum(int n,int hex)
{
int sum=0;
while (n!=0)
{
int r=n%hex;
sum+=r*r;
n/=hex;
}
return sum;
}
int getDiv(int n,int m)
{
int i,res=0,tt=(int)sqrt(n);
for (i=1;i<=tt;i++)
if (n%i==0)
{
res+=hexSum(i,m);
res+=hexSum(n/i,m);
}
if (tt*tt==n)
res-=hexSum(tt,m);
return res;
}
int hexChange(int n,int hex)
{
int i=0,loc=0;
char t[1000];
while (n!=0)
{
t[i++]=num[n%hex];
if (n%hex!=0)
loc=i-1;
n/=hex;
}
for (i=0;loc>=0;loc--,i++)
bit[i]=t[loc];
return i-1;
}
int main()
{
int n,m;
while (~scanf("%d%d",&n,&m))
{
int res,len;
initi();
res=getDiv(n,m);
len=hexChange(res,m);
for (int i=0;i<=len;i++)
printf("%c",bit[i]);
printf("\n");
}
return 0;
}
HDU 4432(Sum of divisors)
最新推荐文章于 2019-01-08 03:18:19 发布