uj5u.com熱心網友回復:
最簡單的雙重回圈 回圈一下不就出來了嘛uj5u.com熱心網友回復:
for exampleint isPNum(int num) { //判斷是否是素數
if (num==2) return 1;
else if (num<2 || num%2==0) return 0;
int n = num>>1; //去num的一半作為回圈結束條件
for (int i=3; i<=n; i+=2) {
if (num%i==0) return 0;
}
return 1;
}
int main()
{
int i, j, k;
for (i=4; i<=2000; i+=2) { //i是從4到2000的偶數
k = i>>1; //k=i/2是一個意思(取i的一半作為回圈結束條件)
for (j=2; j<=k; j++) { //j和i-j是分解的兩個數
if (j != i-j) {
if (isPNum(j) && isPNum(i-j)) {
printf("%d可以分解為%d+%d\n", i, j, i-j);
break; //如果需要找出全部分解結果把這行注釋掉
}
} else {
if (isPNum(j)) {
printf("%d可以分解為%d+%d\n", i, j, j);
break; //如果需要找出全部分解結果把這行注釋掉
}
}
}
}
return 0;
}
uj5u.com熱心網友回復:
所以樓主最后說要盡量優化嘛uj5u.com熱心網友回復:
其實這里素數會重復使用
那么打表顯然是一個性價比更高的做法
uj5u.com熱心網友回復:
應該先素數打表然后用表里面的素數 兩兩現加
然后判斷相加結果是不是把2000以內的全部偶數都沾滿
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/57013.html
標籤:C語言
