题目大意:给一个十进制数n,以及进制m,求n所有因子中m进制位的平方和,最后将和用m进制表示。
解题思路:直接就是Hint过程的模拟,注意大于十进制的要用字母表示的情况,详见code。
题目来源:http://acm.hdu.edu.cn/showproblem.php?pid=4432
code:
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
using namespace std;
#define ll __int64
const int MAXN = 1e5;
int n,m;
ll ans;
char d[MAXN];
void fun(int x){
while(x){
ans+=(x%m)*(x%m);
x/=m;
}
}
int main(){
//freopen("input.txt","r",stdin);
while(~scanf("%d%d",&n,&m)){
ans=0;
memset(d,0,sizeof(d));
for(int i=1;i<=sqrt(n+0.5);++i) if(n%i==0){
fun(i);
if(i!=n/i) fun(n/i);
}
int cnt=0;
while(ans){
if(ans%m>9) d[cnt++]=(ans%m)-10+'A';
else d[cnt++]=(ans%m)+'0';
ans/=m;
}
for(int i=cnt-1;i>=0;--i)
printf("%c",d[i]);
printf("\n");
}
return 0;
}