这是OJ平台上的一道题 题目如下: 验证歌德巴赫猜想
要求:Time Limit: 400/200 MS (Java/Others) Memory Limit: 32768/5000 K (Java/Others) 我自己写了一份代码,用的是筛选法求素数,但提交后还是Time Limit Exceeded,是筛选法还不够优化还是我后面那个输出的方法不够好,或者我的代码中有哪些不足或不妥的地方,请各位大神不吝指出,谢谢 以下是本人的代码: #include<stdio.h> int main() while(scanf(“%d”,&n)==1)//用筛选法求出所有素数 for(p=1; p<t; p++) k=0; if(t%2!=0)//将a[t]一分为二,前部分为较小数,后部分为较大数 for(p=w; p>=1; p–)//思路是”用较小数中的最大数”加上”较大数中的最小数”,不满足判断条件的话,较大数中的最小数再往后变大 if(k==1) return 0; |
|
20分 |
这样可好:
char primes[10000]; int i, j, n; int main(void) { //先找出10000以内的所有素数 memset(primes, ""1"", 10000); for (i = 2; i < 5000; i++) for (j = i*2; j < 10000; j+=i) primes[j] = ""0""; while (1 == scanf("%d", &n)) { j = n / 2; while (""0"" == primes[j] || ""0"" == primes[n - j]) j--; printf("%d %d\n", j, n - j); } return 0; } |
20分 |
事先求好素数表,运算时直接查表,这才是最快的做法。
|
这个题目明显歧视Java啊
|
|
数据最多有多少组?
|
|
谢谢提醒 |
|
恩恩 |