hdu 4432 第37届ACM/ICPC天津现场赛B题

题目大意就是找出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("*****\n");
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("\n");
61     }
62     return 0;
63 }

 

posted @ 2015-04-17 17:22  miao_a_miao  阅读(149)  评论(0编辑  收藏  举报