| 驗證哥德巴赫猜想 |
|
驗證哥德巴赫猜想:任一充分大的偶數(shù),可以用兩個素數(shù)之和表示,例如:
4 = 2 + 2 6 = 3 + 3 .. 9 8 = 1 9 + 7 9 ?
分析:我們先不考慮怎樣判斷一個數(shù)是否為素數(shù),而從整體上對這個問題進行考慮,可以這樣做:讀入一個偶數(shù)n,將它分成p和q,使n = p + q。怎樣分呢?可以令p從2開始,每次加1,而令q = n - p,如果p、q均為素數(shù),則正為所求,否則令p = p + q再試。
?
?
參考程序:
?
#include <math.h>
#include <stdio.h> main( ) { ? long int j,n,p,q,flagp,flagq; ? printf("please input n :\n"); ? scanf("%ld",&n ); ? if (((n%2)!=0)||(n<=4)) ??? printf("input data error!\n"); ? else ?? { ???? p = 1 ; ???? do { ????????? p = p + 1 ; ????????? q = n - p ; ????????? flagp = 1 ; ????????? for(j=2;j<=(int)(sqrt(p));j++)?? ?/*判斷p是否為素數(shù)*/ ??????????? { ?????????????? if ((p%j)==0) ?????????????? { ???????????????? flagp = 0 ; ???????????????? break;????? ?/*不是素數(shù),退出循環(huán)*/ ??????????????? } ????????????? } ???????? flagq=1 ; ???????? for(j=2;j<=(int)(sqrt(q));j++)?? /*判斷q是否為素數(shù)*/ ?????????? { ???????????? if ((q%j)==0) ???????????? { ?????????????? flagq = 0 ; ?????????????? break ;? /*不是素數(shù),退出循環(huán)*/ ????????????? } ?????????? } ???? } while(flagp*flagq==0); ?? printf("%d = %d + %d \n",n,p,q) ; ? } |
Feedback
這個程序?qū)懙暮芎啙崳髁耍瑥姡?/div>
#include <stdio.h>
int check(int n)//驗證n是否為素數(shù)
{
if(n%2==0)
return 0;
for(int i=2;i<n/2;i++)
{
if(n%i==0)
return 0;
}
return 1;
}
void data(int n)
{ int a;
for(int i=2;i<(n/2)+1;i++)
{
a=n-i;
if(check(i)&&check(a))//i ,a 都為素數(shù)則輸出
{
printf("%d %d %d\n",n,a,i);
break;
}
}
}
void main()
{
for(int i=4;i<=1234;i+=2)
data(i);
}
int check(int n)//驗證n是否為素數(shù)
{
if(n%2==0)
return 0;
for(int i=2;i<n/2;i++)
{
if(n%i==0)
return 0;
}
return 1;
}
void data(int n)
{ int a;
for(int i=2;i<(n/2)+1;i++)
{
a=n-i;
if(check(i)&&check(a))//i ,a 都為素數(shù)則輸出
{
printf("%d %d %d\n",n,a,i);
break;
}
}
}
void main()
{
for(int i=4;i<=1234;i+=2)
data(i);
}
flagp = 1 ;
for(j=2;j<=(int)(sqrt(p));j++) /*判斷p是否為素數(shù)*/
{
if ((p%j)==0)
{
flagp = 0 ;
break; /*不是素數(shù),退出循環(huán)*/
}
}
想明白這一部分是什么意思?
初學(xué),請教一下各位前輩
for(j=2;j<=(int)(sqrt(p));j++) /*判斷p是否為素數(shù)*/
{
if ((p%j)==0)
{
flagp = 0 ;
break; /*不是素數(shù),退出循環(huán)*/
}
}
想明白這一部分是什么意思?
初學(xué),請教一下各位前輩
我覺得某些地方應(yīng)該改一下啊
while(flagp*flagq==0);
上面這一句是不是有些問題????/
while(flagp*flagq==0);
上面這一句是不是有些問題????/
在我看來,覺得在驗證是否為素數(shù)時調(diào)用個函數(shù),也許會更加 清楚 明白 簡潔!!
這代碼不錯,但是假如定義一個函數(shù),并在第一個“p”不是素數(shù)時就退出可以執(zhí)行的更快吧。
一個偶數(shù)等于2個奇數(shù)相加,只要其中質(zhì)數(shù)一個減去一個偶數(shù),另一個奇數(shù)加上相同的偶數(shù);最后那個偶數(shù)一定等于奇數(shù)+奇數(shù)。
| 只有注冊用戶登錄后才能發(fā)表評論。 | ||
|
【推薦】100%開源!大型工業(yè)跨平臺軟件C++源碼提供,建模,組態(tài)!
|
||
|
相關(guān)文章:
|
||
網(wǎng)站導(dǎo)航:
博客園
IT新聞
BlogJava
博問
Chat2DB
管理
|
||
|
|


