验证哥德巴赫猜想c语言算法,验证哥德巴赫猜想的简单优化
哥德巴赫猜想:任意一個(gè)大于2的偶數(shù),都可以表示為兩個(gè)素?cái)?shù)之和。
驗(yàn)證:2000以?xún)?nèi),大于2的偶數(shù),都可以分解為兩個(gè)素?cái)?shù)之和。
分析:2000以?xún)?nèi),大于2的偶數(shù)為999個(gè),需要逐個(gè)判斷。
判斷過(guò)程:對(duì)于每個(gè)偶數(shù),將他分解為兩個(gè)數(shù),他們的和等于該偶數(shù)。然后分別判斷這兩個(gè)數(shù)是否為素?cái)?shù),若可以,則滿(mǎn)足題意;否則,重新分解并做素?cái)?shù)判斷。當(dāng)找到一個(gè)偶數(shù)無(wú)法等于為兩個(gè)素?cái)?shù)之和,驗(yàn)證失敗,程序結(jié)束。
#include int main()
{
int isPrime[2000];
//素?cái)?shù)判斷用到的輔助數(shù)組,值為1或0,元素默認(rèn)為0,
//isPrime[a]=0,代表 a 不是素?cái)?shù),isPrime[a]=1時(shí),等于 a 是素?cái)?shù)。
int a = 1;
int flag ,i;
//while循環(huán)用于找出2000以?xún)?nèi)所有素?cái)?shù)
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;//表示數(shù) a 為素?cái)?shù)
}
++a;
}
int k;
for(i = 4;i <= 2000;i += 2){
for(k = 2;k <= i/2;k++){//分解,k從2開(kāi)始,因?yàn)?不是素?cái)?shù),k小于等于i/2,因?yàn)閺膇/2處,分解與之前的分解對(duì)稱(chēng)。
if(isPrime[k] && isPrime[i - k]){//判斷分解得到的兩個(gè)數(shù)是否均為素?cái)?shù)
printf("第%d個(gè)偶數(shù):%d + %d = %d\n", i/2, k, i-k, i);
break;
}
}
if(k>(i/2)){
//上面for循環(huán),并沒(méi)有break出來(lái),k才會(huì)大于i/2,這就代表偶數(shù) i 無(wú)法分解成兩個(gè)素?cái)?shù)之和。
printf("error");
break;
}
}
return 0;
}
優(yōu)化了兩部分,
1、偶數(shù)分解部分,避免了重復(fù)判斷。
2、優(yōu)化了素?cái)?shù)判斷,避免了重復(fù)判斷。
總結(jié)
以上是生活随笔為你收集整理的验证哥德巴赫猜想c语言算法,验证哥德巴赫猜想的简单优化的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: win 10 安装 glew 方法
- 下一篇: c语言两种排序方法的组合,排列和组合算法