日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

C语言--输入一个数判断是否为素数(多种方法)

發(fā)布時間:2023/12/10 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C语言--输入一个数判断是否为素数(多种方法) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

?需要解決這個問題,首先我們要明白-------->什么是素數(shù)?

(質數(shù))素數(shù)是指在大于1的自然數(shù)中,除了1和它本身以外不再有其他因數(shù)的自然數(shù)。

舉個例子:4? 可以 由2*2=4? 和1*4 得到,不符合素數(shù)的條件,所以不是素數(shù)。

? ? ? ? ? ? ? ? ??5? 只能由1*5 得到,符合素數(shù)的條件,所以是素數(shù)。

好了現(xiàn)在,我們了解了素數(shù)的概念,我們就把它轉化成代碼的思想,進行我們的操作了。

1.??第一種方法,這種方法的思想也是最直接最普遍的,假設這個數(shù)是n,我們需要判斷素數(shù),我們就拿這個數(shù)和從(2~~n-1)的每個數(shù)去和這個數(shù)做取余操作,如果有一個數(shù)可以使得余數(shù)為0,則這個數(shù)不是素數(shù),反之則這個數(shù)為素數(shù)。

好了接下來我們用代碼實現(xiàn)

#include <stdio.h> int main() {int i=0;int j=0;printf("輸入一個數(shù) "); scanf("%d",&j);for(i=2;i<j;i++){if(j%i==0){printf("%d 不是素數(shù)",j); break;}}if(j==i){printf("%d 是素數(shù)",j); }if(j==1){printf("%d 不是素數(shù)",j); }return 0;}

?代碼的具體實現(xiàn)就在上面,可能有的同學對if語句中為什么當j==i時,就輸出是素數(shù)。

?不要著急,我給大家捋捋思路,我們可以思考一下,如果在(2~~j-1)中的每一個數(shù)都沒滿足取余操作后余數(shù)為0,那這時我的 i 應該 等于j-1,但我們的 i 由于滿足i<j還會繼續(xù)進行++操作,然后我的 i 就等于j ,此時已經不滿足i <j 的條件,我們就會跳出for循環(huán),此時我們就可以認為,當 i==j時,這個數(shù)為素數(shù)。

2.第二種方法,我們對第一種方法進行優(yōu)化,我們通過下述例子分析可知,每個數(shù)的因數(shù)中,其中一個不會超過本身的1/2,所以我們可以利用這個思想對代碼進行優(yōu)化。

我們其實并不需要對(2~~n-1)的全部數(shù)進行上述操作,我們可以只對(2~~n/2)的全部數(shù)進行上面的操作就可以了,這樣可以簡化我們的計算范圍。

舉個例子:4? 可以 由2*2=4? 和1*4 得到,因數(shù) 2,2或1,4,每組其中的一個因數(shù)不大于自身(4)的1/2。

好了接下來我們用代碼實現(xiàn)

#include <stdio.h> int main() {int i=0;int j=0;printf("輸入一個數(shù) "); scanf("%d",&j);for(i=2;i<=j/2;i++){if(j%i==0){printf("%d 不是素數(shù)",j);break;}}if(j==1){printf("%d 不是素數(shù)",j);}if((i>j/2) && (j!=1)){printf("%d 是素數(shù)",j);}return 0; }

?大家覺得還能對代碼思想進行優(yōu)化嗎?🤭🤭

答案是肯定的!

3.第三種方法,我們對第二種方法進行優(yōu)化,我們通過下述例子分析可知,每個數(shù)的因數(shù)中,其中一個不會超過本身的開方,這樣我們又縮小了我們的計算范圍,所以我們可以利用這個思想再次對代碼進行優(yōu)化。

舉個例子:16?可以 由1*16,2*8和4*4,得到,因數(shù)1,16和2,8和4,4每組其中的一個因數(shù)不大于本身(16)的開方(4)。

好了接下來我們用代碼實現(xiàn)

#include <stdio.h> #include<math.h> int main() {int i=0;int j=0;printf("輸入一個數(shù) "); scanf("%d",&j);for(i=2;i<=sqrt(j);i++){if(j%i==0){printf("%d 不是素數(shù)",j);break;}}if(j==1){printf("%d 不是素數(shù)",j);}if((i>sqrt(j)) && (j!=1)){printf("%d 是素數(shù)",j);}return 0; }

?因為用到了數(shù)學中開平方的函數(shù),所以引用了多一個庫,這個不做過多講解,大家自行去了解。

當然判斷素數(shù)不知有上述的方法,還可以通過函數(shù)進行實現(xiàn)。

4.第四種方法(函數(shù)實現(xiàn))

具體的代碼思想和第一種方法一樣,不再講解。

好了接下來我們用代碼實現(xiàn)

#include <stdio.h> int judge(int n) {int i=0;for(i=2;i<n;i++){if(n%i==0)return 0;}if(n==1){return 0;}return 1; } int main() {int j=0;printf("輸入一個數(shù)"); scanf("%d",&j);if(judge(j)==1)printf("%d 是素數(shù)",j);elseprintf("%d 不是素數(shù)",j);return 0; }

?這種思想和第一種一樣,所以也可以像第二,三種那樣對代碼進行優(yōu)化,這里就不過多講解了(累了累了嘞😵😵)

遇到的問題:我思考了好久,在糾結當輸入1的時候的這種情況應該怎么去調整代碼,大家能看到我每塊代碼都用了If語句對是不是1進行了判斷,(能力有限😥😥)所以我能想到的方法就是通過 if 語句對輸入的1進行判斷,如果不用這個if語句,那輸入1 的時候結果可能就有問題,但我覺得這樣會不會太麻煩了,但我又想不出來怎么去調整。

有沒有大佬能指點指點我(但是盡量簡單點我怕我聽不懂😭😭)

(初級大二軟工在讀小白)用來整理自己的基礎知識,如果寫的有什么不對的地方,還望各位大佬指出!

總結

以上是生活随笔為你收集整理的C语言--输入一个数判断是否为素数(多种方法)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。