题目大意就是找出n的约数,然后把约数在m进制下展开,各个数位的每一位平方求和,然后按m进制输出。
模拟即可
1 #include<cstdio> 2 #include<iostream> 3 #include<algorithm> 4 #include<cstring> 5 #include<cmath> 6 #include<queue> 7 #include<map> 8 using namespace std; 9 #define MOD 1000000007 10 const double eps=1e-5; 11 #define cl(a) memset(a,0,sizeof(a)) 12 #define ts printf("***** "); 13 const int MAXN=1005; 14 int digit[MAXN]; 15 int n,m,tt,tot=0; 16 int len=0; 17 void solve(int x,int base) 18 { 19 len=0; 20 while(x) 21 { 22 digit[len++]=x%base; 23 x/=base; 24 } 25 } 26 int main() 27 { 28 int i,j,k; 29 #ifndef ONLINE_JUDGE 30 freopen("1.in","r",stdin); 31 #endif 32 while(scanf("%d%d",&n,&m)!=EOF) 33 { 34 int sum=0; 35 for(i=1;i<=sqrt(n*1.0);i++) 36 { 37 if(n%i==0) 38 { 39 int temp=i; 40 while(temp) 41 { 42 sum+=(temp%m)*(temp%m); 43 temp/=m; 44 } 45 temp=n/i; 46 if(temp==i) continue; //排除约数相等的情况 47 while(temp) 48 { 49 sum+=(temp%m)*(temp%m); 50 temp/=m; 51 } 52 } 53 } 54 solve(sum,m); 55 for(i=len-1;i>=0;i--) 56 { 57 if(digit[i]>9) printf("%c",digit[i]-10+'A'); 58 else printf("%d",digit[i]); 59 } 60 printf(" "); 61 } 62 return 0; 63 }