素?cái)?shù)又稱質(zhì)數(shù),所謂素?cái)?shù)是指除了 1 和它本身以外,不能被任何整數(shù)整除的數(shù),例如17就是素?cái)?shù),因?yàn)樗荒鼙?2~16 的任一整數(shù)整除。
潛江網(wǎng)站建設(shè)公司成都創(chuàng)新互聯(lián)公司,潛江網(wǎng)站設(shè)計(jì)制作,有大型網(wǎng)站制作公司豐富經(jīng)驗(yàn)。已為潛江上1000+提供企業(yè)網(wǎng)站建設(shè)服務(wù)。企業(yè)網(wǎng)站搭建\外貿(mào)網(wǎng)站建設(shè)要多少錢,請(qǐng)找那個(gè)售后服務(wù)好的潛江做網(wǎng)站的公司定做!
思路1、判斷一個(gè)整數(shù)m是否是素?cái)?shù),只需把 m 被 2 ~ m-1 之間的每一個(gè)整數(shù)去除,如果都不能被整除,那么 m 就是一個(gè)素?cái)?shù)。
思路2、判斷方法還可以簡(jiǎn)化。
m 不必被2~m-1之間的每一個(gè)整數(shù)去除,只需被2~√m之間的每一個(gè)整數(shù)去除就可以了。如果 m 不能被2~√m?間任一整數(shù)整除,m必定是素?cái)?shù)。例如判別17是是否為素?cái)?shù),只需使17被2~4之間的每一個(gè)整數(shù)去除,由于都不能整除,可以判定17是素?cái)?shù)。
原因:因?yàn)槿绻鹠能被2~m-1之間任一整數(shù)整除,其二個(gè)因子必定有一個(gè)小于或等于√m,另一個(gè)大于或等于√m。
例如16能被2、4、8整除,16=2*8,2小于 4,8大于4,16=4*4,4=√16,因此只需判定在2~4之間有無(wú)因子即可。
兩種思路的代碼請(qǐng)看解析。
拓展資料:
素?cái)?shù)(prime number)又稱質(zhì)數(shù),有無(wú)限個(gè)。素?cái)?shù)定義為在大于1的自然數(shù)中,除了1和它本身以外不再有其他因數(shù)。
C語(yǔ)言是一門面向過程、抽象化的通用程序設(shè)計(jì)語(yǔ)言,廣泛應(yīng)用于底層開發(fā)。C語(yǔ)言能以簡(jiǎn)易的方式編譯、處理低級(jí)存儲(chǔ)器。C語(yǔ)言是僅產(chǎn)生少量的機(jī)器語(yǔ)言以及不需要任何運(yùn)行環(huán)境支持便能運(yùn)行的高效率程序設(shè)計(jì)語(yǔ)言。
參考資料:
百度百科——素?cái)?shù)
百度百科——C語(yǔ)言
按照如下步驟即可用C語(yǔ)言判斷素?cái)?shù):
1、首先打開visual C++ 6.0,然后點(diǎn)擊左上角的文件,再點(diǎn)擊新建。
2、然后在彈出的新建對(duì)話框中點(diǎn)擊C++Source File。
3、在新建的文件文本框中輸入預(yù)處理命令和主函數(shù),即函數(shù)頭和空類型。
4、然后再定義變量并輸入一個(gè)數(shù)字,即定義變量的數(shù)據(jù)類型,輸出文字提示,再輸入一個(gè)數(shù)字。
5、然后用for函數(shù)和if函數(shù)判斷是否是素?cái)?shù)。
6、點(diǎn)擊確定后即可成功創(chuàng)建剛剛新建的程序,隨機(jī)輸入一個(gè)數(shù)字即可驗(yàn)證一下剛剛創(chuàng)建的C語(yǔ)言。
工具/材料
ubuntu,vim,gcc
01
打開ubuntu并開啟一個(gè)終端,輸入命令vim is_prime.c,打開編輯頁(yè)面,輸入預(yù)處理指令#includestdio.h用于在主函數(shù)中調(diào)用判斷函數(shù)。然后定義一個(gè)函數(shù)int is_prime(int n),即判斷整數(shù)n是否為素?cái)?shù)。
02
首先,判斷這個(gè)數(shù)是否小于2.若是,則直接返回0,即表示它不是一個(gè)素?cái)?shù)。
03
然后定義中間的因數(shù)i,初始值為2。依次使n對(duì)i取余數(shù),看n能否整除i,然后令i自增直到i的平方大于n。在這過程中,如果遇到n能整除i,則說明n不是一個(gè)素?cái)?shù)。如果循環(huán)能夠直到i的平方大于n才結(jié)束,說明n是一個(gè)素?cái)?shù)。
04
接下來(lái),我們使用主函數(shù)進(jìn)行測(cè)試,使用printf("%d : %d\n", n, is_prime(n))的格式進(jìn)行輸出。如果輸出結(jié)果為0,說明不為素?cái)?shù);結(jié)果為1,說明是一個(gè)素?cái)?shù)。
測(cè)試的數(shù)據(jù)依次是2,4,9,15, 17, 23, 25。
05
退出編輯器vim,然后使用gcc編譯并運(yùn)行它,得到結(jié)果。通過結(jié)果我們可以看出,預(yù)期的結(jié)果與我們對(duì)于素?cái)?shù)的認(rèn)知是相同的,說明我們的程序編寫沒有錯(cuò)誤。以下是所有的源代碼:
#include stdio.h
//判斷一個(gè)數(shù)是否為素?cái)?shù)的函數(shù)定義
int is_prime(int n)
{
//判斷n是否小于2.若小于則直接返回0
//表示n不是一個(gè)素?cái)?shù)
if(n 2)
return 0;
//定義一個(gè)中間變量i,初始化i=2
int i = 2;
//依次判斷每一個(gè)不大于根號(hào)n的i是否能被n整除
for(i = 2; i * i = n;i++)
{
//如果能夠整除
if(n % i == 0)
//直接返回0,表示n不是一個(gè)素?cái)?shù)
return 0;
}
//如果程序運(yùn)行到這里,說明i*i大于n
//說明n是一個(gè)素?cái)?shù)
return 1;
}
int main()
{
printf("%d : %d\n", 2, is_prime(2));
printf("%d : %d\n", 4, is_prime(4));
printf("%d : %d\n", 9, is_prime(9));
printf("%d : %d\n", 15, is_prime(15));
printf("%d : %d\n", 17, is_prime(17));
printf("%d : %d\n", 23, is_prime(23));
printf("%d : %d\n", 25, is_prime(25));
return 0;
}
#include stdio.h
int fun(int x)//
{
if(x2)
return 0;//返回0,非素?cái)?shù)
for(int i=2;i*i=x;i++)
if(x%i==0)
return 0;
return 1;//返回1,素?cái)?shù)
}
int main()
{
int n;
scanf("%d",n);
if(fun(n)==1)
printf("%d是素?cái)?shù)\n",n);
else
printf("%d不是素?cái)?shù)\n",n);
return 0;
}