C语言--输入一个数判断是否为素数(多种方法)
?需要解決這個問題,首先我們要明白-------->什么是素數(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语言--输入一个数判断是否为素数(多种方法)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Win10系列:JavaScript页面
- 下一篇: (五)多线程编程