您好,登錄后才能下訂單哦!
這篇文章主要介紹了C語言中怎么判斷質數的相關知識,內容詳細易懂,操作簡單快捷,具有一定借鑒價值,相信大家閱讀完這篇C語言中怎么判斷質數文章都會有所收獲,下面我們一起來看看吧。
寫判斷質數的程序時,需特別注意邊界條件:
1.開始邊界條件:2作為第一位質數,不參與循環;
2.循環主體:divisor += divisor % 2 +1代表當除數divisor是奇數時+2,是偶數時+1;
3.結束邊界條件:當divisor趨近n時,即divisor=n-1或divisor=n-2,仍然沒有數能被n整除,那么可以判斷n為質數
#include <stdio.h> int main() { int divisor; int n; scanf("%d",&n); // 輸入要判斷的數 if (n == 2) { printf("YES"); } else { for (divisor = 2; divisor < n; divisor += (divisor % 2 + 1) ) { if (n % divisor == 0) { printf("NO"); // 當出現能被1或自身之外整除時 break; } else if (divisor == n - 1 || divisor == n-2) { printf("YES"); // 循環到 n-1 或 n-2 時,仍然沒有被其他數整除 } } } return 0; }
下列程序寫了一個判別素數的函數,在主函數輸入一個整數,輸出是否為素數的信息。
#include <stdio.h> int main() { int prime(int); int n; printf("請輸入一個整數:"); scanf("%d",&n); if______________________ printf("%d 是素數。\n",n); else printf("%d 不是素數。\n",n); return 0; } int prime(int n) { int flag=1,i; for(i=2;i<n/2&&flag==1;i++) if ______________________ flag=0; ________________________; }
經分析,以上代碼使用flag的值來判斷輸入的n是否為素數,flag=1,n為素數;flag=0,n不是素數。完善if條件語句,第一個if, 主函數中的if調用函數,需要填入一個參數,即prime(n); 第二個if,是判斷什么情況下flag=0,即輸入的整數不為素數,即(n/i==0),余數為0,可以整除;最后返回flag的值,return flag。
但是經過運行可以知道,n=4的時候,程序判斷4是素數,明顯是錯誤的,n取0和1的時候同理,程序存在漏洞。
分析得知,在定義函數的過程中,for循環條件語句,i<=n/2&&flag==1才能正確運行,同時添加if語句對0和1判斷。(前提輸入的n>=0,如果為負整數,另加判斷條件,略)
#include <stdio.h> int main() { int prime(int);//函數聲明 int n; printf("請輸入一個整數:\n"); scanf("%d",&n); if(prime(n)) { printf("%d 是素數。\n",n); }else { printf("%d 不是素數。\n",n); } return 0; } int prime(int n) //函數定義 { int flag = 1,i; if (n <= 1) //判斷0和1,需要先排除 flag = 0; //返回0值 for(i=2;i <= n/2 && flag == 1;i++) //n無法整除比n/2大的數,flag=1為真,即為素數,繼續執行 if (n%i == 0) //如果取余為0,則其可以整除,不是素數。 flag=0; //標記flag=0,非素數。 return flag; }
關于“C語言中怎么判斷質數”這篇文章的內容就介紹到這里,感謝各位的閱讀!相信大家對“C語言中怎么判斷質數”知識都有一定的了解,大家如果還想學習更多知識,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。