http://poj.org/problem?id=2262
Time Limit: 1000MS | Memory Limit: 65536K | |
Total Submissions: 33301 | Accepted: 12782 |
Description
Every even number greater than 4 can be
written as the sum of two odd prime numbers.
8 = 3 + 5. Both 3 and 5 are odd prime numbers.
20 = 3 + 17 = 7 + 13.
42 = 5 + 37 = 11 + 31 = 13 + 29 = 19 + 23.
Input
Output
Sample Input
8 20 42 0
Sample Output
8 = 3 + 5 20 = 3 + 17 42 = 5 + 37
数论题。主要是判断一个数是否为质数,代码如下:
#include"stdio.h" int a[1000002]; int b[41540]; int main() { int N; int i,j; for(i=2;i<1002;i++) { if(!a[i]) { for(j=i*i;j<1000002;j+=i) a[j]=1; } } b[0]=2; for(j=1,i=3;i<500002;i+=2) { if(!a[i]) { b[j++]=i; } } while(scanf("%d",&N)!=EOF && N) { for(i=0;b[i]<N;i++) if(!a[N-b[i]]) break; printf("%d = %d + %d\n",N,b[i],N-b[i]); } return 0; }
yinjili | 2262 | Accepted | 4244K | 141MS | C++ | 427B |
耗时 141 MS,有点慢,尝试改进代码:
#include"stdio.h" int a[1000002]; int main() { int N; int i,j; for(i=2;i<1002;i++) { if(!a[i]) { for(j=i*i;j<1000002;j+=i) a[j]=1; } } while(scanf("%d",&N)!=EOF && N) { for(i=2;i<N;i++) if(!a[i] && !a[N-i]) break; printf("%d = %d + %d\n",N,i,N-i); } return 0; }
2262 | Accepted | 4076K | 125MS | C++ | 325B |
耗时 125 MS,还是有点慢,尝试改进代码:
#include"stdio.h" char a[1000002]; int main() { int N; int i,j,t; for(i=0x03;i<0x3ea;i+=0x02) { if(!a[i]) { for(j=i*i;j<0xf4242;j+=i) a[j]=0x01; } } while(scanf("%d",&N)!=EOF && N) { t=N/2; for(i=0x03;i<=t;i+=0x02) if(!a[i] && !a[N-i]) break; printf("%d = %d + %d\n",N,i,N-i); } return 0; }
yinjili | 2262 | Accepted | 1140K | 94MS | C++ | 354B |
71 | 11749546(3) | yinjili | 1140K | 94MS | C++ | 354B |
耗时 94 MS。在C++中排名 71 。
尝试改善代码,提高性能,不仅仅满足AC !