當前位置:首頁 » 編程軟體 » 編程無窮素數

編程無窮素數

發布時間: 2022-04-27 01:15:20

A. c語言 求100—200之間的全部素數,並且輸出每10個換一行

第一個問題的分析:如果滿足i<=k,則說明這個數不是素數,則不用輸出,不執行下面的printf的函數,只有滿足i>=k+1(其實是滿足1=k+1),才能判斷此數為素數,則輸出。所以程序是正確的。

第二個問題的分析:兩個程序的最終結果是一樣的,都是正確的。

程序自然結束後,會有i==k+1,此時是素數,列印數字;而如果是break出循環,則假設不成立,為合數,不列印字元,執行下一次循環。

(1)編程無窮素數擴展閱讀:

如果 為合數,因為任何一個合數都可以分解為幾個素數的積;而N和N+1的最大公約數是1,所以不可能被p1,p2,……,pn整除,所以該合數分解得到的素因數肯定不在假設的素數集合中。因此無論該數是素數還是合數,都意味著在假設的有限個素數之外還存在著其他素數。所以原先的假設不成立。也就是說,素數有無窮多個。

B. 怎麼證明有無窮個素數

反證法,
假設素數有有限多個,分別為a1,a2,……an
則構造一個數a(n+1)=(a1*a2*……*an)+1
這個數不是任何一個素數的倍數,所以為素數,矛盾
得證

C. 如何證明素數又無窮多個

假設素數只有有限個,記為p1,p2,……,pn。考慮這個數(p1p2……pn)+1=a,則a為合數,故必有素因子q。由於只有有限個素數,q必是上述n個素數中的一個。但是,a除以上述n個素數中的任何一個都餘1,這與n是q的倍數矛盾!

所以,素數有無窮多個

D. C語言求100以內素數的問題

#include<stdio.h>

int main()

{

int i=0;

int count=0;

for(i=0;i<=100;i++)

{

int j=0;

for(j=2;j<=i;j++)

{

if(i%j==0)

{

break;

}

}

if(i==j)

{

count++;

printf("%d ",i);

}

}

printf(" count=%d ",count);

return 0;

}

解題思路:

素數,就是除了1和他本身,不能被其他數整除的數字。答案就是用100到200之間的每個數字,除以2到其本身前面的那一個數字,如果此過程中出現整除的現象,則該數不是素數。如果沒有整除的現象,則該數為素數輸出。

(4)編程無窮素數擴展閱讀:

質數又稱素數。一個大於1的自然數,除了1和它自身外,不能整除其他自然數的數叫做質數;否則稱為合數。

質數的個數是無窮的。歐幾里得的《幾何原本》中有一個經典的證明。它使用了證明常用的方法:反證法。具體證明如下:假設質數只有有限的n個,從小到大依次排列為p1,p2,……,pn,設N=p1×p2×……×pn,那麼,要大於p1,p2,……,pn,所以它不在那些假設的素數集合中。

E. 如何證明素數個數是無窮的(詳細過程)

(反證) 假設素數是有限的,假設素數只有有限的n個,最大的一個素數是p 設q為所有素數之積加上1,那麼,q = ( 2 * 3 * 5 * …… * p )+ 1不是素數 那麼,q可以被2、3、……、p中的數整除 而q被這2、3、……、p中任意一個整除都會餘1,與之矛盾 所以,素數是無限的。 (也可以這樣說明:若q能被小於q的數整除,情況有兩種,被小於q的素數或被小於q的合數。小於q的素數也就包括在2,3,5,…… p 中,明顯不能被他們整除;如果能被小於q的合數m整除,合數m又可以分為兩個更小的素數相乘,設m=s*t,則s<m<q,t<m& lt;q,那麼q肯定能被s或t中的任何一個整除,而s和t都是小於q的素數,都不能整除q,所以就矛盾。)

滿意請採納

F. 怎樣證明素數有無窮多個

這是《數學天書中的證明》中的第一個問題。書中列舉了6種證法,這里只說一下大概思路:
(1)假設素數有限,所有素數之積加一不能被任何素數整除,於是我們得到一個新的素數,矛盾。
(2)因為任意兩個費馬數互素,而費馬數有無窮多個,因此有無窮多個素數。
(3)令p為最大的素數,考慮梅森數2^p - 1的素因子。任意一個該數的素因子都大於p,矛盾,所以不存在最大的素數。
(4)log(x)是素數計數函數的一個下界,因為log(x)無界,所以素數無限。
(5)構造整數集上的一個拓撲,使素數和該拓撲上的某些既開又閉的集合一一對應,從而導出一個開集{-1, 1},然後證明{-1, 1}不可能是開集。
(6)證明

發散。

G. 判斷是否是素數編程

#include<stdio.h>

int fun(int x)

{

for(int i=2;i<x;i++)

if(x%i==0)

return 0;

return 1;//是素數返回值為 1;

}

int main()

{

int n;

scanf("%d",&n);

if(n<2)

{

while(1)//無限循環,不執行break一直循環;

{

printf("輸入錯誤;請重新輸入 ");

scanf("%d",&n);

if(n>=2)

{

printf("輸入正確;開始判斷 ");

if(fun(n))

{

printf("%d is a prime number.",n);

break;

}

else

{

printf("%d is not a prime number.",n);

break;

}

}

}

}

else//n>=2時的素數判斷;

{

if(fun(n))

printf("%d is a prime number.",n);

else

printf("%d is not a prime number.",n);

}

return 0;


}

H. c語言輸出100到200之間的素數

解題思路:

首先先找出來100~200以內的所有整數,再讓這些整數對除了1和它本身以外的數求余,如果有能整除的就不是素數,否則就為素數。

先找出來100到200的所有整數,都為i

用i去對除了1和它本身以外的數求余。

正確的代碼:

#include<stdio.h>

int main()

{

int conut = 0;

int i = 0;

for(i=100; i<=200; i++)

{

int j = 0;

for(j=2; j<i; j++)

{

if(i%j == 0)

break;

}

if(j==i)

{

conut++;

printf("%d ", i);

}

}

printf(" ");

printf("素數個數為:%d ", conut);

return 0;

}

第二個if語句的判斷條件應該是j==i;而不是i%j 。

(8)編程無窮素數擴展閱讀:

實現的其他方法:

需要用到sort函數,也就是開平方根函數。頭文件為#include<math.h>。 顯而易見,任何一個數,每一對因子都是由這個數開平方後的數的左右各一個組成,所以,在求余過程中,只需要對從2到開平方之後的數求余即可。遇到可以整除的就不是素數,否則就為素數。

代碼:

#include<stdio.h>

#include<math.h>

int main()

{

int count = 0;

int i = 0;

for(i=100; i<=200; i++)

{

int j = 0;

for(j=2; j<=sqrt(i); j++)

{

if(i%j == 0)

break;

}

if(j > sqrt(i))

{

count++;

printf("%d ",i);

}

}

printf(" ");

printf("素數個數為:%d", count);

return 0;

}

I. 關於"素數無窮多"的疑問

只能說明這種證明方法不完善,並且,素數的表示方法並非就這一種,還有其他表示方法,如:n!+1,我們可以這樣證明:
假設素數個數有限,則必有一個最大的
設最大的素數是P
令n=2*3*5*7*……*P+1
即把所有的素數相乘並加上1
顯然n>P

若因為P是最大素數,所以n是合數
則n能被2,3,……,P中至少一個素數整除
但用這些數去除n,都有餘數1,即都不能整除
這就有兩種可能
(1),n是素數
(2),n是合數,但他只能被大於P的素數整除
這兩種情況都和P是最大素數矛盾。
所以假設錯誤
所以素數是無限
也可以如下證明:
素數與公因數
1、素數 我們知道,大於1,並且除1和它本身外沒有其他因數的自然數叫素數(或質數)

2是最小的素數,除2以外,所有的偶數都不是素數。

按順序,下列為一個小素數序列:

2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,…

不是素數的整數a>1稱為合數。例如,因為有3|39,所以39是合數。整數1被稱為基數,它既不是質數也不是合數。類似地,整數0和所有負整數既不是素數也不是合數。

關於素數,有如下重要結論:

①素數有無窮個。

證明:假設素數只有有限的n個,從小到大依次排列為p1,p2,...,pn,則 x = (p1·p2·...·pn)+1 顯然是不能被p1,p2,...,pn中的任何一個素數整除的,因此x也是一個素數,這和只有n個素數矛盾,所以素數是無限多的。

這個證明的最早來自亞里士多德,非常漂亮,是反證法的經典應用,這個證明被歐拉稱為「直接來自上帝的證明」,歷代的數學家也對其評價很高。

但是,千萬不可認為,形如p1·p2·...·pn+1(其中p1,p2,...,pn均為素數)的數就一定是素數!第八屆全國青少年信息學奧林匹克聯賽(NOIP2002)提高組初賽試題第三題第2小題,寫程序運行結果,程序要找的就是形如p1·p2·...·pn+1(其中p1,p2,...,pn均為素數)的數中第一個是合數的整數。

2*3+1=7 是素數

2*3*5+1=31 是素數

2*3*5*7+1=211 是素數

2*3*5*7*11+1=2311 是素數

2*3*5*7*11*13+1=30031 不是素數,因為30031=59*509

引用內容
華東師范大學版的數學9年級教材P94有這樣一個命題:
從素數2開始,排在前面的任意多個素數的乘積加1一定也是素數。
這個結論就是錯誤的。

雖然最大的素數是不存在的,但是人們卻對探知最大的素數樂此不疲。

213466917-1

這是到目前為止人類所發現的最大素數,它是由Michael在2001年12月7日發現的,這是一個梅森素數,有4,053,946位數字。

所謂梅森素數,是以17世紀法國修道士M.梅森的名字命名的.梅森在1644年出版的著作《物理數學隨感》的序言中宣稱,對於n=2,3,5,7,13,17,19,31,67,127,257,數Mn=2n-1是素數,而對於其他所有小於257的數n,Mn是合數.但是,這里出現了5個錯誤,M67,M257不是素數,而M61,M89,M107是素數.顯然,要使Mn是素數,n本身必須是素數,但是反過來,n是素數,Mn卻不一定是素數,例如雖然11是素數,可是M11=2047=23X89是合數.

現在尋找很大的梅森素數時,已經完全依賴於計算機了,可以想像,離開了計算機,我們人類將會落入一種怎樣的地步.當D.H.萊默博士這位曾經在梅森素數上花費了許多時光的老學者,親眼看到了計算機在短短的48秒鍾內做完了他20年前花費了700多小時才完成的艱辛勞動,最後證明2257-1是一個合數時,他是多麼地感慨萬端哪.

時至今日,人類只找到39個梅森素數.前18個梅森素數是n=2,3,5,7,13,17,19,31,61,89,107,127,521,607,1279,2203,2281,3217時的Mn=2n-1.下表列出了從1961年以來所發現的全部梅森素數.

------------------------------------------------------------------------------

素數是無限的,歐幾里得在《幾何原本》裡面已經給出了證明,現在已經有很多種證明方法了。這里我收集一兩個。

證法一:
(一)學過初中的同學都知道n!與n!+1互質。故n!與1、2、3、…..n-1、n互質那麼n!+1有2種可能(1)n!+1為素數。(2)n!+1為合數
(1)設a=n!+1為素數 集合A={x|0<x≤n x∈N}有b個素數,則集合B={x|0<x≤n!+1 x∈N}內至少有b+個素數
(2)設a=n!+1為合數則在集合B\A中至少有2個元素可以被a整除
易證:c=min{x|x∈B\A 且a/x=h h∈N}為素數。同(1)設集合A內有b個素數。則集合B內至少有b+1個素數
綜合(1)、(2)可得:設集合A={x|0<x≤n x∈N}有b個素數,則集合B={x|0<x≤n!+1 x∈N}內至少有b+個素數。
重復(一)操作可得集合C={x|o<x≤(n!+1)!+1 x∈N}內至少有b+2個素數。
繼續沿用(一)的操作,用數學歸納法可證:設集合A={x|0<x≤n x∈N}有b個素數,則集合D={x|o<x≤{[(n!+1)!+1]!+1…..}內至少有b+d個素數
d重
由此:當d→+∞時,e=素數的個數≥b+d=+∞
證明完畢。

證法二:(反證)
假設素數是有限的,假設素數只有有限的n個,最大的一個素數是p
設q為所有素數之積加上1,那麼,q = ( 2 * 3 * 5 * …… * p )+ 1不是素數
那麼,q可以被2、3、……、p中的數整除
而q被這2、3、……、p中任意一個整除都會餘1,與之矛盾
所以,素數是無限的。
(也可以這樣說明:若q能被小於q的數整除,情況有兩種,被小於q的素數或被小於q的合數。小於q的素數也就包括在2,3,5,…… p 中,明顯不能被他們整除;如果能被小於q的合數m整除,合數m又可以分為兩個更小的素數相乘,設m=s*t,則s<m<q,t<m<q,那麼q肯定能被s或t中的任何一個整除,而s和t都是小於q的素數,都不能整除q,所以就矛盾。)

J. c#求素數

int j, n = 0;
Console.WriteLine("輸出1000以內的所有素數:");
for (int i = 2; i <= 1000; i++)
{
for (j = 2; j <= i -1; j++)
{
if (i % j == 0)
break;

}
if (j > i-1 )
{
n += 1;
Console.Write("{0}\t", i);
}
}
Console.WriteLine();
Console.WriteLine("統計共有:{0}個數", n);
Console.Read();

熱點內容
scratch少兒編程課程 發布:2025-04-16 17:11:44 瀏覽:628
榮耀x10從哪裡設置密碼 發布:2025-04-16 17:11:43 瀏覽:357
java從入門到精通視頻 發布:2025-04-16 17:11:43 瀏覽:76
php微信介面教程 發布:2025-04-16 17:07:30 瀏覽:300
android實現陰影 發布:2025-04-16 16:50:08 瀏覽:788
粉筆直播課緩存 發布:2025-04-16 16:31:21 瀏覽:338
機頂盒都有什麼配置 發布:2025-04-16 16:24:37 瀏覽:204
編寫手游反編譯都需要學習什麼 發布:2025-04-16 16:19:36 瀏覽:801
proteus編譯文件位置 發布:2025-04-16 16:18:44 瀏覽:357
土壓縮的本質 發布:2025-04-16 16:13:21 瀏覽:583