水题。
先根号n分解因数,再进行简单的进制转换。
坑:有10~16进制情况,要输出ABCDEF,开始没看见wa了。
代码:
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <vector>
using namespace std;
#define LL long long
vector <int> Div;
char c[10000];
void solve(LL n){
int k=sqrt(n);
for(int i=1;i<=k;i++){
if(n%i==0){
Div.push_back(i);
if(i!=(n/i)) Div.push_back(n/i);
}
}
}
LL Get(LL n,int m){
LL res=0;
while(n>0){
int tmp=n%m;
LL T=tmp*tmp;
res+=T;
n/=m;
}
return res;
}
int change(LL n,int m){
LL res=0;
int i=0;
while(n>0){
LL tmp=n%m;
char tc;
if(tmp==10) tc='A';
else if(tmp==11) tc='B';
else if(tmp==12) tc='C';
else if(tmp==13) tc='D';
else if(tmp==14) tc='E';
else if(tmp==15) tc='F';
else tc=char(tmp+'0');
c[i]=tc;
n/=m;
i++;
}
i--;
return i;
}
int main(){
int m;
LL n;
while(~scanf("%I64d%d",&n,&m)){
Div.clear();
solve(n);
LL res=0;
for(int i=0;i<Div.size();i++){
res+=Get(Div[i],m);
}
int len=change(res,m);
for(int i=len;i>=0;i--){
printf("%c",c[i]);
}
printf("\n");
}
return 0;
}