验证哥德巴赫猜想c语言算法,验证哥德巴赫猜想的简单优化
哥德巴赫猜想:任意一個大于2的偶數,都可以表示為兩個素數之和。
驗證:2000以內,大于2的偶數,都可以分解為兩個素數之和。
分析:2000以內,大于2的偶數為999個,需要逐個判斷。
判斷過程:對于每個偶數,將他分解為兩個數,他們的和等于該偶數。然后分別判斷這兩個數是否為素數,若可以,則滿足題意;否則,重新分解并做素數判斷。當找到一個偶數無法等于為兩個素數之和,驗證失敗,程序結束。
#include int main()
{
int isPrime[2000];
//素數判斷用到的輔助數組,值為1或0,元素默認為0,
//isPrime[a]=0,代表 a 不是素數,isPrime[a]=1時,等于 a 是素數。
int a = 1;
int flag ,i;
//while循環用于找出2000以內所有素數
while (a <= 2000)
{
flag = 0;
for(i = 2; i <= a/2; ++i)
{
if(a % i == 0)
{
flag = 1;
break;
}
}
if (flag == 0){
isPrime[a] = 1;//表示數 a 為素數
}
++a;
}
int k;
for(i = 4;i <= 2000;i += 2){
for(k = 2;k <= i/2;k++){//分解,k從2開始,因為1不是素數,k小于等于i/2,因為從i/2處,分解與之前的分解對稱。
if(isPrime[k] && isPrime[i - k]){//判斷分解得到的兩個數是否均為素數
printf("第%d個偶數:%d + %d = %d\n", i/2, k, i-k, i);
break;
}
}
if(k>(i/2)){
//上面for循環,并沒有break出來,k才會大于i/2,這就代表偶數 i 無法分解成兩個素數之和。
printf("error");
break;
}
}
return 0;
}
優化了兩部分,
1、偶數分解部分,避免了重復判斷。
2、優化了素數判斷,避免了重復判斷。
總結
以上是生活随笔為你收集整理的验证哥德巴赫猜想c语言算法,验证哥德巴赫猜想的简单优化的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: win 10 安装 glew 方法
- 下一篇: 企业级自动化运维工具应用实战-ansib