C語言中如何判斷質(zhì)數(shù)
C語言判斷質(zhì)數(shù)
寫判斷質(zhì)數(shù)的程序時,需特別注意邊界條件:
1.開始邊界條件:2作為第一位質(zhì)數(shù),不參與循環(huán);
2.循環(huán)主體:divisor += divisor % 2 +1代表當(dāng)除數(shù)divisor是奇數(shù)時+2,是偶數(shù)時+1;
3.結(jié)束邊界條件:當(dāng)divisor趨近n時,即divisor=n-1或divisor=n-2,仍然沒有數(shù)能被n整除,那么可以判斷n為質(zhì)數(shù)
#include <stdio.h> int main() { int divisor; int n; scanf("%d",&n); // 輸入要判斷的數(shù) if (n == 2) { printf("YES"); } else { for (divisor = 2; divisor < n; divisor += (divisor % 2 + 1) ) { if (n % divisor == 0) { printf("NO"); // 當(dāng)出現(xiàn)能被1或自身之外整除時 break; } else if (divisor == n - 1 || divisor == n-2) { printf("YES"); // 循環(huán)到 n-1 或 n-2 時,仍然沒有被其他數(shù)整除 } } } return 0; }
C語言判斷素數(shù)的函數(shù)
下列程序?qū)懥艘粋€判別素數(shù)的函數(shù),在主函數(shù)輸入一個整數(shù),輸出是否為素數(shù)的信息。
#include <stdio.h>? int main() ? ?{ ? ? ? int prime(int); ? ? ? int n; ? ? ? printf("請輸入一個整數(shù):"); ? ? ? scanf("%d",&n);?? ? ? ? ?if______________________ ? ? ? ? ? ? ? ?? ?? ? ? ? printf("%d 是素數(shù)。\n",n); ? ? ?else ?? ? ? ? printf("%d 不是素數(shù)。\n",n); ? ? ?return 0; ? ?} ? int prime(int n) ? { ? ? ?int flag=1,i; ? ? ?for(i=2;i<n/2&&flag==1;i++) ? ? ?if ______________________ ? ? ? ? ? ? ? ? ?? ? ? ?flag=0; ? ? ?________________________; ? ? }
經(jīng)分析,以上代碼使用flag的值來判斷輸入的n是否為素數(shù),flag=1,n為素數(shù);flag=0,n不是素數(shù)。完善if條件語句,第一個if, 主函數(shù)中的if調(diào)用函數(shù),需要填入一個參數(shù),即prime(n); 第二個if,是判斷什么情況下flag=0,即輸入的整數(shù)不為素數(shù),即(n/i==0),余數(shù)為0,可以整除;最后返回flag的值,return flag。
但是經(jīng)過運(yùn)行可以知道,n=4的時候,程序判斷4是素數(shù),明顯是錯誤的,n取0和1的時候同理,程序存在漏洞。
分析得知,在定義函數(shù)的過程中,for循環(huán)條件語句,i<=n/2&&flag==1才能正確運(yùn)行,同時添加if語句對0和1判斷。(前提輸入的n>=0,如果為負(fù)整數(shù),另加判斷條件,略)
正確代碼如下
#include <stdio.h> int main() { int prime(int);//函數(shù)聲明 int n; printf("請輸入一個整數(shù):\n"); scanf("%d",&n); if(prime(n)) { printf("%d 是素數(shù)。\n",n); }else { printf("%d 不是素數(shù)。\n",n); } return 0; } int prime(int n) //函數(shù)定義 { int flag = 1,i; if (n <= 1) //判斷0和1,需要先排除 flag = 0; //返回0值 for(i=2;i <= n/2 && flag == 1;i++) //n無法整除比n/2大的數(shù),flag=1為真,即為素數(shù),繼續(xù)執(zhí)行 if (n%i == 0) //如果取余為0,則其可以整除,不是素數(shù)。 flag=0; //標(biāo)記flag=0,非素數(shù)。 return flag; }
總結(jié)
以上為個人經(jīng)驗(yàn),希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
C++教程之a(chǎn)rray數(shù)組使用示例詳解
這篇文章主要為大家介紹了C++教程之a(chǎn)rray數(shù)組使用示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-03-03詳解C++模擬實(shí)現(xiàn)priority_queue(仿函數(shù))
本文主要介紹了關(guān)于C++中優(yōu)先級隊列的模擬實(shí)現(xiàn),以及仿函數(shù)的使用,優(yōu)先級隊列是一種容器適配器,其第一個元素總是最大的,仿函數(shù)本質(zhì)是一個類,重載了operator(),可改變比較邏輯,同時,文中還介紹了如何進(jìn)行類的比較,如日期類或其指針的比較,以及庫中sort函數(shù)的使用方法2024-10-10cmake跨平臺構(gòu)建工具的學(xué)習(xí)筆記
CMake是一個跨平臺的安裝/編譯工具,通過CMake我們可以通過簡單的語句來描述所有平臺的安裝/編譯過程,下面這篇文章主要給大家介紹了關(guān)于cmake跨平臺構(gòu)建工具的相關(guān)資料,需要的朋友可以參考下2023-02-02C語言簡明講解三目運(yùn)算符和逗號表達(dá)式的使用
三目運(yùn)算符,又稱條件運(yùn)算符,它是唯一有3個操作數(shù)的運(yùn)算符,有時又稱為三元運(yùn)算符。三目運(yùn)算符的結(jié)合性是右結(jié)合的;逗號表達(dá)式,是c語言中的逗號運(yùn)算符,優(yōu)先級別最低,它將兩個及其以上的式子聯(lián)接起來,從左往右逐個計算表達(dá)式,整個表達(dá)式的值為最后一個表達(dá)式的值2022-04-04