『壹』 c語言:驗證哥德巴赫猜想:任何一個大於等於6的偶數均可表示為2個素數之和,例如6=3+3,8=3+5,....18=5+13
#include<stdio.h>
intprime(intn)
{
inti;
for(i=3;i*i<=n;i+=2)
if(!(n%i))return0;
returnn>1;
}
intmain()
{
intm,n,i;
scanf("%d,%d",&m,&n);
if(m<6)m=6;
if(m%2)m++;
for(;m<=n;m+=2)
for(i=3;i<=m/2;i+=2)
if(prime(i)&&prime(n-i))
printf("%d=%d+%d
",m,i,n-i);
return0;
}
『貳』 用C語言編程解決哥德巴赫猜想,輸入一個大於六的偶數,輸出該偶數能分為幾對素數之和,以下代碼錯在何處
我來個完整的程序:
//哥德巴赫猜想:
//1.每個不小於6的偶數都是兩個奇素數之和。(本程序要解決的問題)
//2.每個不小於9的奇數都是三個奇素數之和。
#include<stdio.h>
#include<conio.h>
#include<math.h>
intPrime(unsignedlongu){//判斷u是否是素數,1是,0不是
unsignedlongi,k;
k=(unsignedlong)sqrt(u);//求u的開根號,作為判斷素數整除數的上限
for(i=2;i<=k;++i){
if(u%i==0)return0;//遇到能整除的,不是素數
}
return1;
}
intmain(){
unsignedlongn,i,j,k;
printf("======GeDeBaHeCaiXiang(1)====== ");
do{
printf(" Inputn(>=6):");
scanf("%ld",&n);
if(n<6||n%2)break;//如果輸入的數小於6,或為奇數,則退出
for(k=0,i=3;i<=n/2;i+=2){//循環選擇第一個加數(是奇數)
if(!Prime(i))continue;//如果i不是素數,換過下一個數
j=n-i;
if(!Prime(j))continue;//如果j不是素數,換過下一個數
printf("%lu:%lu+%lu ",++k,i,j);//找到第k組解,輸出
}
}while(1);
printf(" Finished! ");
getch();
return0;
}
希望對你有幫助。
『叄』 怎麼用C語言編程驗證哥德巴赫猜想
哇,這個問題已經被擱置4年了,我看到了就來答一下吧(雖然可能已經沒人感興趣了)
首先,聽說哥德巴赫猜想已經被證明了,也就是不存在不成立的情況了,(可點擊鏈接
http://tieba..com/p/542673904)
然後是問題本身,如果真有不符合的,可以在for(m=3;m<=k-3;m++)這個循環後面判斷一下是否是循環到了盡頭,即是否m>k-3,如果到了盡頭都不符合,那就可以輸出不符合了;
至於全部不符合的情況,由於前面已經逐項輸出,已經列印的事實已經無法改變,因此就無法只輸出說該范圍內所有數都不符合,若真的要達到那種效果,可以把你要printf的先用fprintf函數打到臨時創建的文件里,然後最後根據判斷不符合的個數決定全部列印還是列印一條。總之是用文件讀寫是一種方法。
最後呢,如果說還要改進的話,有兩點可以改進下——1,我從老師那裡聽來判斷素數的條件可以再縮小一點,也就是文中的y=x/2,可以改為 y=sqrt(x)【因為sqrt(x)的平方=x,如果小於y的整數不符合,那麼大於y的數也不會符合】;
2,類似於第一點 for(m=3;m<=k-3;m++)條件可改為m<=k/2;【理由同1】。
呃,就是這樣了,不過4年前應該提問者是大一現在應該畢業了吧~哈哈
『肆』 用c語言驗證哥德巴赫猜想
#include<stdio.h>
voidmain()
{intx,y,z;
inti,j;
for(x=4;x<100;x++,x++)//對100以內的偶數
for(y=1;y<x;y++)//y<x改成y<x/2就可以去掉8=3+58=5+3這類的重復了
{for(i=2;i<y;i++)//判斷y是否為素數
if(y%i==0)break;
if(i==y)//y是素數
{z=x-y;//x=y+z
for(j=2;j<=z;j++)//判斷z是否為素數
if(z%j==0)break;
if(j==z)//z是素數
printf("%d=%d+%d ",x,y,z);
}
}
printf(" ");
}
『伍』 哥德巴赫猜想!!!! C語言
一)設計思想:<br> <br>1:為了證明一個小於都2000的偶數,能被兩個素數相加,首先求出1-2000內的所有素數,以方便相加,我們將保存在一個sushu[2000]數組中備用。<br> <br>2:從鍵盤輸入一個偶數後在核心函數中處理,尋找合適的兩個素數。<br> <br>3:輸出結果。<br> <br> 二)流程圖:<br> <br>(畫不出來改成文字了)<br> <br>1:聲明所需的變數及數組<br> 2:求出所有2000以內的素數保存在數組中備用。<br> 3:輸入一個偶數,並在素數組中尋找合適的兩個素數<br> 4:將結果輸出<br> <br> 三)難重點及解決方法:<br> 1:2000以內的素數的求出,我們用了兩個循環套來使得素數各方面條件都得到滿足後保存入數組。<br> <br>2:查找滿足的兩個素數,為了能查到匹配的兩個素數,我們也用了兩個循環套來保證一個不漏的找到。<br> <br>四)核心內容:<br> 1:求素數的內容如下:<br> <br> s=ss=0;<br> <br> sushu[0]=2;<br> <br> xiabiao=1;<br> <br> for (int s=3;s<2000;s++)<br> {<br> for (int ss=2;ss<=s;ss++)<br> {<br> if (0==s%ss) break;<br> }<br> <br> if (s==ss) sushu[xiabiao++]=s;<br> }<br> <br>////////////////////////////////////////////////////<br> <br>2:查找匹配的兩個素數的內容如下:<br> <br> for (s=0;s<xiabiao-1;s++)<br> {<br> for (ss=s+1;ss<xiabiao;ss++)<br> {<br> <br> <br> if (m_1==sushu[s]+sushu[ss])<br> <br>{ <br> m_2=sushu[s];<br> <br>m_3=sushu[ss];<br> <br>UpdateData(FALSE);<br> <br>return ;<br> }<br> }<br> <br> }<br> <br> 五)程序運行結果截圖: