UVA 10791
AC代碼:
1 #include<stdio.h>
2 #include<string.h>
3 #include<algorithm>
4 #include<math.h>
5 using namespace std;
6 #define LL long long
7
8 LL n,sum;
9
10 inline LL divisor(LL x)
11 {
12 int t=0,cnt;
13 LL tp;
14 for(int i=2; i<=sqrt(n); i++)
15 {
16 cnt=0;
17 tp=1;
18 if(x%i==0&&i!=n)
19 {
20 while(x)
21 {
22 if(x%i==0)
23 {
24 cnt++;
25 x=x/i;
26 tp=tp*i;
27 }
28 else {sum+=tp;break;}
29 }
30 t++;
31 }
32 if(!x) break;
33 }
34 if(x>1){sum+=x;t++;}
35 // printf("sum=%lld\n",sum);
36 return t;
37 }
38
39 int main()
40 {
41
42 int ca=1;
43 while(scanf("%lld",&n),n)
44 {
45 sum=0;
46 LL m=divisor(n);
47 if(sum==0||m==1)sum=n+1;
48 printf("Case %d: %lld\n",ca++,sum);
49 }
50 return 0;
51 }
超時代碼:
1 #include<stdio.h>
2 #include<string.h>
3 #include<algorithm>
4 using namespace std;
5 #define LL long long
6
7 LL n,sum;
8
9 inline LL divisor(LL x)
10 {
11 int t=0,cnt;
12 LL tp;
13 for(int i=2; i<=x; i++)//這麼寫,就超時 了。。。。。
14 {
15 cnt=0;
16 tp=1;
17 if(x%i==0&&i!=n)
18 {
19 while(x)
20 {
21 if(x%i==0)
22 {
23 cnt++;
24 x=x/i;
25 tp=tp*i;
26 }
27 else {sum+=tp;break;}
28 }
29 t++;
30 }
31 if(!x) break;
32 }
33 return t;
34 }
35
36 int main()
37 {
38
39 int ca=1;
40 while(scanf("%lld",&n),n)
41 {
42 sum=0;
43 LL m=divisor(n);
44 if(sum==0||m==1)sum=n+1;
45 printf("Case %d: %lld\n",ca++,sum);
46 }
47 return 0;
48 }