UVA 10791 - Minimum Sum LCM(坑)
不知道为什么,我用cin,cout就是过不了。。。改成scanf过了。。。
还是我居然理解错题意了,已经不能用看错了。。。至少两个数字,我理解成两个数字了,还写了个爆搜。。。
1 #include <cstdio> 2 #include <cstring> 3 #include <string> 4 #include <cmath> 5 #include <ctime> 6 #include <cstdlib> 7 #include <iostream> 8 using namespace std; 9 #define LL long long 10 #define MOD 1000000007 11 int prim[1000001]; 12 int o[1000001]; 13 LL que[5001]; 14 int main() 15 { 16 int cas = 1,i,j,num = 0,m; 17 LL n,temp; 18 for(i = 2;i <= 1000000;i ++) 19 { 20 if(!o[i]) 21 { 22 prim[num++] = i; 23 for(j = i+i;j <= 1000000;j += i) 24 o[j] = 1; 25 } 26 } 27 while(scanf("%lld",&n)!=EOF) 28 { 29 if(!n) break; 30 printf("Case %d: ",cas++); 31 if(n == 1) 32 { 33 printf("2\n"); 34 continue; 35 } 36 m = 0; 37 for(i = 0;i < num;i ++) 38 { 39 if(n == 1) break; 40 if(n%prim[i] == 0) 41 { 42 temp = 1; 43 while(n%prim[i] == 0) 44 { 45 temp *= prim[i]; 46 n /= prim[i]; 47 } 48 que[m++] = temp; 49 } 50 } 51 if(n != 1) 52 que[m++] = n; 53 LL minz = 0; 54 if(m == 1) 55 { 56 printf("%lld\n",que[0]+1); 57 continue; 58 } 59 for(i = 0;i < m;i ++) 60 { 61 minz += que[i]; 62 } 63 printf("%lld\n",minz); 64 } 65 return 0; 66 }