第一篇:用C語言證明哥德巴赫猜想
用C語言證明哥德巴赫猜想
哥德巴赫猜想:任何一個大于6的偶數都可以寫成兩個素數的和。#include
#include
int main(void)
{
int number,a,b;
char c;
int i,j,k,l;
int sum,m;
system(“cls”);
printf(“enter your number:”);
scanf(“%d”,&number);
for(i=2;i<=number;i++)
{
sum=1;
for(j=2;j
{
if(i%j!=0)
{
sum=sum+1;
}
}
if(sum==(i-1))
{
if((i+1)==number)
{
a=i;
b=1;
printf(“%d=%d+%dn”,number,a,b);
}
else
{
for(k=2;k<=i;k++)
{
m=1;
for(l=2;l { if(k%l!=0) { m=m+1; } } if(m==(k-1)){if((i+k)==number&&i!=k){a=i;b=k;printf(“%d=%d+%dn”,number,a,b); } } } } system(“pause”); }} } C語言驗證哥德巴赫猜想(100以內) #include “stdafx.h” #include “stdio.h” int ss(int i) { int j; if(i <= 1) return 0; if(i == 2) return 1; for(j = 2;j < i;j++) { if(i % j == 0) return 0; else if(i!= j + 1) continue; else return 1; } } int main() { int i, j, k, flag1, flag2, n = 0;for(i = 6;i < 100;i += 2) } {} return 0;for(k = 2;k <= i / 2;k++){} j = i-k;flag1 = ss(k);if(flag1){} flag2 = ss(j);if(flag2){} printf(“%3d=%3d+%3d,”, i, k, j);//輸出結果 n++;if(n % 5 == 0)//每個數自動換一行 printf(“n”);//調用ss函數判斷另一個數是否為素數 //如果都是素數//調用ss函數判斷當前數是否為素數//循環判斷是否為素數//如果等于返回//如果小于等于返回 #include #include int is_prime(int); main(){ } //驗證[a,b]區間內的整數是否符合猜想 int yanzhengGDBH(int a,int b){ } int gdbh(int n){//驗證偶數n能否分解成兩個素數 int a;a=3;while(a } } if(is_prime(a)){// 判斷a是否是素數} a++;if(is_prime(n-a)){// 判斷n-a是否是素數} printf(“OK!%d=%d+%dn”,n,a,n-a);return 1;printf(“gedebahe ,ni cuo le!n”);return 0; int is_prime(int n){//判斷n是否是素數 } int i=2;if(n<2)return 0;while(i<=sqrt(n)){//2-根號n,找n的因子} return 1;//i是n的因子,不是素數 if(n%i==0){} i++;return 0;//i是n的因子,不是素數 驗證哥德巴赫猜想 #include #include 哥德巴赫猜想的證明方法 探索者:王志成人們不是說:證明哥德巴赫猜想,必須證明“充分大”的偶數有“1+1”的素數對,才能說明哥德巴赫猜想成立嗎?今天,我們就來談如何尋找“充分大”的偶數素數對的方法。 “充分大”的偶數指10的500次方,即500位數以上的偶數。因為,我沒有學過電腦,也不知道大數的電腦計算方法,所以,我只有將“充分大”的偶數素數對的尋找方法告訴大家,請電腦高手幫助進行實施。又因為,人們已經能夠尋找1000位數以上的素數,對于500位數以內的素數的尋找應該不是問題,所以,“充分大”的偶數應該難不住當今的學術界。 “充分大”的偶數雖然大,我認為:我們只須要尋找一個特定的等差數列后,再取該數列的1000項到2000項,在這2000個數之內必然能夠尋找到組成偶數素數對的素數。下面,我們進行簡單的探索,從中尋找到具體方法。 我們以偶數39366為例,進行探索,按照本人的定理:在偶數內,既不能被素因子整除,也不與偶數除以素因子的余數相同的數(自然數1除外),必然能夠組成偶數的素數對。 這里所說的素因子,指小于偶數平方根的素數,√39366≈198,即小于198的素數為偶數39366的素因子。 一、初步探索,1、素因子2,39366/2余0,當然,任何偶數除以2都余0,素數2把自然數分為:1+2N和2+2N,除以2余0的數和與偶數除以素因子2的余數相同的數都是2+2N數列中的數,剩余1+2N數列中的數為哥德巴赫數的形成線路; 2、素因子3,39366/3余0,素數3把1+2N數列分為:1+6N,3+6N,5+6N,除以3余0的數和與偶數除以素因子3的余數相同的數都是3+6N數列中的數,剩余1+6N,5+6N,兩個數列中的數為哥德巴赫數的形成線路; 3、素因子5,39366/5余1,我們對上面剩余的兩個數列任意取一個數列1+6N,取與素因子相同的項,5個項有:1,7,13,19,25。在這5個項中,必然有一個項除以5余0,必然有一個項除以素因子的余數與偶數除以素因子的余數相同,必然剩余素因子5減去2(不能被素因子整除的,為素因子減去1)個項,即5-2=3個項既不能被素因子整除,也不與偶數除以素因子的余數相同的數。剩余7,13,19,以前面的素因子乘積2*3*5為公差,組成3個哥德巴赫數的形成線路:7+30N,13+30N,19+30N。后面只取3個項,至少有一個項。 4、素因子7,39366/7余5,我們任意取7+30N的3個項有:7,37,67,這3個數中37,67,既不能被素因子整除,也不與偶數除以素因子的余數相同的數。即37+210N和67+210N兩條線路都可以,5、素因子11,39366/11余8,我們取37+210N的3個項:37,247,457,這3個數,既不能被素因子整除,也不與偶數除以素因子的余數相同的數。組成3個數列:37+2310N,247+2310N,457+2310N。 7、素因子13,39366/13余2,因為,下一個公差為2*3*5*7*11*13=30030,39366/30030≈1,不能組成與素因子13相同的13個項,尋找組成偶數的素數對的素數,在取最后一個公差的等差數列時,不能取與素因子相同項數時,最少必須取素因子1/2以上的項。我們取247+2310N數列在偶數1/2之內的數有:247,2557,4867,7177,9487,11797,14107,16417,18727。 從素因子13到197,雖然還有40個素因子進行刪除,但是,大家不要怕,它們的刪除率是相當低的,所以,在這些數中必然有能夠組成偶數素數對的素數存在。 素因子13,刪除能被13整除的數247,刪除除以13與39366除以13余數相同的數14107; 素因子19,刪除除以19與39366除以19余數相同的數11797; 素因子31,刪除能被31整除的數4867; 素因子53,刪除能被53整除的數9487,刪除除以53與39366除以53余數相同的數16417; 素因子61,刪除能被61整除的數18727。 最后,剩余2557和7177兩個數,必然能組成偶數39366的素數對。 探索方法 二、1、尋找等差數列的公差,令偶數為M、公差為B,我們已知該題的公差為2310,2310=2*3*5*7*11,大于11的下一個素數為13,用13/2=6.5,那么,公差的要件為: M/B>6.5,即大于7個項,主要是既要取最大的公差,又要確保不低于下一個素因子的1/2個項。我們就選擇2310為該偶數的公差。 2、尋找等差數列的首項,令首項為A,A的條件為:既不能被組成公差的素數2,3,5,7,11整除,也不與偶數除以2,3,5,7,11的余數相同,還必須在公差2310之內; (1)、不能被2,3,5,7,11整除的數有:在2310之內,大于或等于13的素數;自然數1;由大于或等于13的素因子與大于或等于13的素因子所組成的合數。為了方便起見,我們在這里取大于或等于13的素因子。 (2)、A除以2,3,5,7,11的余數不與偶數39366除以2,3,5,7,11的余數相同。因39366-13=39353,39353分別除以2,3,5,7,11不能整除,故13除以2,3,5,7,11的余數不與偶數39366除以2,3,5,7,11的余數相同,可以定為首項,得該等差數列為13+2310N。 取等差數列13在M/2的項有:13,2323,4633,6943,9253,11563,13873,16183,18493。當然,你也可以取該數列在偶數內的所有項,但是,當你全盤計算該偶數素數對時,取所有項必然形成與對稱數列的計算重復,該數列的對稱數列:因2310-13=2297,13不能被2,3,5,7,11整除,除以2,3,5,7,11的余數不與偶數39366除以2,3,5,7,11的余數相同,那么,對稱數2297也必然滿足這些條件,2297+2310N同樣是產生素數對的等差數列。 3、在上面的9上項中,去掉合數:2323,4633,6943,9253,11563,4、再去掉除以后面40個素因子余數與偶數除以這40個素因子余數相同的數,也就是對稱數是合數的數:13,13873,16183,剩余18493必然能夠組成偶數39366的素數對。 簡單地談一下素數生成線路與哥德巴赫數的生成線路的區別: 1、素數生成線路,我們仍然以2310為公差,在2310之內不能被2,3,5,7,11整除的數有:2310*(1/2)*(2/3)*(4/5)*(6/7)*(10/11)=480個,我們可以用這480個數為首項,以2310為公差組成480個等差數列,為偶數39366內的素數生成線路。對于相鄰的偶數39364和39368來說,素數的生成線路是一樣的。 2、我們把能夠組成偶數素數對的素數稱為哥德巴赫數,偶數39366的哥德巴赫數生成線路,以2310為公差,在2310之內,既不能被2,3,5,7,11整除,也不與偶數39366除以2,3,5,7,11的余數相同的數有:2310*(1/2)*(2/3)*(3/5)*(5/7)*(9/11)=270個,即偶數39366以2310為公差的哥德巴赫數生成線路為270條,在2310內的這270個數又是與2310/2=1155完全對稱的,如果全盤進行計算必然重復,故,也可以看成是270/2=135條完整的哥德巴赫數形成線路,而素數生成線路是不會重復的。 而偶數39364的哥德巴赫數生成線路,在2310之內既不能被2,3,5,7,11整除,也不與偶數除以2,3,5,7,11的余數相同的數有:2310*(1/2)*(1/3)*(3/5)*(5/7)*(9/11)=135,為135條線路,只有偶數39366的1/2。區別在于偶數39366能夠被素因子3整除,為乘以2/3,偶數39364不能夠被素因子3整除,為乘以1/3,即能夠整除的素因子X,為乘以(X-1)/X,不能夠整除的素因子Y,為乘以(Y-2)/Y,所以,偶數39366的素數對相當于偶數39364的素數對的2倍。 對于“充分大”的偶數的估算:充分大的偶數為500位數,素數對個數,根據《哥德巴赫猜想的初級證明法》中,當偶數大于91時,偶數的素數對個數不低于K(√M)/4,估計當偶數大于500位時,K的值為4*10的10次方,得充分大的偶數的素數對個數不低于260位數,用500位數的偶數除以260位數的數,得充分大的偶數平均240位數個數字中,有一個素數對的存在。如果我們直接進行尋找,相當于大海撈針。 如果,我們按照上面的方法二進行尋找,公差應為496位數,估計素數2*3*5*7*?*1283為496位數,從素數1289到2861之內,有素數除以素因子2,3,5,7,?,1283的余數不與偶數除以這些素因子的余數相同的數存在,存在的這個數可以作為等差數列的首項,2*3*5*7*?*1283的積作為等差數列的公差,取1289項,即1289個數,在這1289個數中,應該有能夠組成500位數的偶數的1+1的素數對的素數存在。 難易度分析 尋找“充分大”偶數的一個“1+1”素數對與驗證1000位數以上的一個素數相比較,到底哪一個難度小。 人類已經能夠尋找并驗證1000位數以上的素數,到底人們使用的什么辦法,我雖然不知道,但有一點可以肯定:都涉及素數,如果是簡單的方法,那么,都是簡單方法;如果是笨辦法,那么,都用笨辦法。我們在這里采用笨辦法進行比較: 充分大的偶數指500位數的數,與1000位數的素數相比,相差500位數。1000位數的數開平方為500位數,我們以位數相差一半的數為例進行分析。 100000000與10000相差一半的位數。笨辦法是:要驗證100000000以上的一個素數,假設要驗證的這個數開平方約等于10000,必須要用這個數除以10000之內的素數,不能被這之內所有的素數整除,這個數才是素數。因為,10000內共有素數1229個,即必須做1229個除法題,才能得知這個數是不是素數。說個再笨一點的辦法,假設我們不知道10000之內的素數,能否驗證100000000以上的這個數是不是素數呢?能,那就是用這個數除以10000內的所有數,不能被這之內所有的數整除,也說明這個數是素數。(之所以說,這兩種辦法是笨辦法,當我們知道10000內的所有素數時,要尋找100000000內的所有素數,不是用除法,而是用乘法,步驟最多只占第一種笨辦法的1%,詳見本人的《素數的分布》中所說的方法)。 當我們尋找偶數10000的一個素數對,須要多少個運算式? 我們知道:2*3*5*7*11=2310,10000/2310≈4,13/2=6.5,按理說應該取等差數列的7項以上,這里可以取4個項,接近應取數。我們基本上可以使用這個公差。這里的計算為5個計算式,簡稱5步; 大于11的素數,從13開始,尋找等差數列的首項,我們用(10000-13)分別除以2,3,5,7,11。能被3整除,除到3為止,一個減法,兩個除法,為3步; 素數17,(10000-17)分別除以2,3,5,7,11。不能整除,可以用17為等差數列的首項,組成等差數列:17+2310N。為6步; 數列17+2310N在10000內有:17,2327,4637,6947,9257,為4步; 計算素因子,√10000=100,素因子為100之內的素數,除2,3,5,7,11外,還剩13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97,為20個素因子。為1步; 用10000分別除以這20個素因子,把余數記下來。為20步; 用17分別除以這些素因子,當除到67時余數與10000除以67余數相同,為14步; 用2327分別除以這些素因子,當除到13時余數為0,為1步; 用4637分別除以這些素因子,當除到31時余數與10000除以31余數相同,為6步; 用6947分別除以這些素因子,當除到43時余數與10000除以43余數相同,為9步; 用9257分別除以這些素因子,既不能整除,也不與10000除以這些素因子的余數相同,奇數9257必然能組成偶數10000的素數對。為20步。 總計為:102步計算式。而驗證100000000以上的一個素數須要1229步計算式相比,結論為:尋找10000的一個素數對比驗證100000000以上的一個素數簡單。也就是說,尋找一個500位數偶數1+1的素數對,比驗證一個1000位數以上的素數容易。 尋找500位數偶數的素數對,因為,2*3*5*7*11*?*1283左右,其乘積為493到496位數,下一個素數可能為1289左右,1289/2=644.5。才能滿足取下一個素因子的值的1/2以上個項,當然,能夠取到1289個項以上更好,更容易尋找到偶數的素數對。 敬請世界電腦高手驗證,充分大的偶數必然有1+1的素數對存在,哥德巴赫猜想必然成立。 四川省三臺縣工商局:王志成第二篇:C語言驗證哥德巴赫猜想
第三篇:c語言 哥德巴赫猜想2
第四篇:C語言驗證哥德巴赫猜想
第五篇:哥德巴赫猜想證明方法