go語(yǔ)言判斷質(zhì)數(shù) 編程判斷質(zhì)數(shù)

怎樣判斷一個(gè)數(shù)是不是質(zhì)數(shù)?

質(zhì)數(shù)又稱素?cái)?shù)。一個(gè)大于1的自然數(shù),除了1和它自身外,不能被其他自然數(shù)整除的數(shù)叫做質(zhì)數(shù);否則稱為合數(shù)。

創(chuàng)新互聯(lián)專注為客戶提供全方位的互聯(lián)網(wǎng)綜合服務(wù),包含不限于網(wǎng)站設(shè)計(jì)制作、成都網(wǎng)站制作、凌河網(wǎng)絡(luò)推廣、小程序定制開發(fā)、凌河網(wǎng)絡(luò)營(yíng)銷、凌河企業(yè)策劃、凌河品牌公關(guān)、搜索引擎seo、人物專訪、企業(yè)宣傳片、企業(yè)代運(yùn)營(yíng)等,從售前售中售后,我們都將竭誠(chéng)為您服務(wù),您的肯定,是我們最大的嘉獎(jiǎng);創(chuàng)新互聯(lián)為所有大學(xué)生創(chuàng)業(yè)者提供凌河建站搭建服務(wù),24小時(shí)服務(wù)熱線:13518219792,官方網(wǎng)址:muchs.cn

輾轉(zhuǎn)相除法是判斷兩個(gè)數(shù)是否互質(zhì)的,而不是應(yīng)用在一個(gè)數(shù)上,是求兩個(gè)數(shù)的大公約數(shù)。

輾轉(zhuǎn)相除法的具體做法:用較小數(shù)除較大數(shù),再用出現(xiàn)的余數(shù)(第一余數(shù))去除除數(shù),再用出現(xiàn)的余數(shù)(第二余數(shù))去除第一余數(shù),如此反復(fù),直到最后余數(shù)是0為止。如果是求兩個(gè)數(shù)的最大公約數(shù),那么最后的除數(shù)就是這兩個(gè)數(shù)的最大公約數(shù)。

這是具體流程圖,判斷一個(gè)數(shù)是否是質(zhì)數(shù)就是看它能否被除1以外的數(shù)整除。

Go語(yǔ)言中怎樣判斷數(shù)據(jù)類型

一般來(lái)說(shuō),我們不會(huì)直接使用ASCII碼來(lái)處理,因?yàn)檫@樣不夠直觀。比如你說(shuō)的判定輸入是否是字母,是否是數(shù)字,那么有個(gè)比較直觀的方法來(lái)處理。如果你看過(guò)ASCII碼表,那么你就知道字?jǐn)?shù)和字母在ASCII碼表中都是連續(xù)的,所以這個(gè)就比較好解決了。

判定字符ch是否是數(shù)字:

if(ch='0' ch='9')

判定字符ch是否是字母:

if(ch='a' ch='z' || ch='A' ch='Z')

當(dāng)然,有已經(jīng)定義好的庫(kù)函數(shù)用來(lái)判定是否數(shù)字和字母,不要加加載頭文件ctype.h

判定字符ch是否是數(shù)字:

if(isalnum(ch));

判定字符ch是否是字母:

if(isalpha(ch));

這兩個(gè)函數(shù)都是判定成立,結(jié)果是true也就是1,判定不成立,結(jié)果是false,也就是0.

c語(yǔ)言中如何判斷一個(gè)數(shù)是否是質(zhì)數(shù)?

判斷一個(gè)數(shù)是否是質(zhì)數(shù)在于看這個(gè)數(shù)字是否只能被1和它本身所整除的整數(shù)。但是有一個(gè)例外,1不屬于質(zhì)數(shù)。

c語(yǔ)言中的質(zhì)數(shù):

數(shù)學(xué)的概念中,素?cái)?shù)就是只能被1和它本身所整除的整數(shù)。但是有一個(gè)例外,就是1不屬于素?cái)?shù)。所以你在輸入一個(gè)整數(shù)并加以判斷的時(shí)候就需要考慮這種情況了。如下即可:

while(scanf("%lu", num) == 1 num != 1)

1

這里用到了while循環(huán)來(lái)判斷輸入的數(shù)值并加以判斷,如果輸入格式正確的話會(huì)返回一個(gè)1并將輸入的數(shù)值存入num這個(gè)變量中,然后再判斷num的值是否為1。

在這里有一條很好用的規(guī)則用于素?cái)?shù)的判斷:測(cè)試的數(shù)只需要界于2到num的平方根之間的所有數(shù),看它們是否可以整除num。如果可以整除,說(shuō)明輸入的數(shù)不是素?cái)?shù);反之,說(shuō)明輸入的數(shù)是素?cái)?shù)。

到這里,就會(huì)有人說(shuō)平方根怎么求,其實(shí)這個(gè)很好解決。你完全可以像下面這樣描述判斷條件:

for(div = 2; (div * div) = num;div++){

if(num % div == 0){

if((div * div) != num){

printf("%lu is divisible by %lu and %lu.\n", num, div, num / div);

}else {

printf("%lu is divisible by %lu.\n", num, div);

在這里,在if條件語(yǔ)句里面還嵌套了一個(gè)if條件語(yǔ)句,用來(lái)判斷兩個(gè)約數(shù)是否是一樣的,比如144,約數(shù)是12和12,這時(shí)候就只需要打印一個(gè)約數(shù)即可。

第二,我們?cè)鯓又酪粋€(gè)數(shù)數(shù)素?cái)?shù)呢?

如果num是素?cái)?shù),程序流程永遠(yuǎn)也進(jìn)不了if語(yǔ)句中。為了解決這個(gè)問(wèn)題,可以在循環(huán)外設(shè)置一個(gè)變量為某一值,比方說(shuō)1,在if語(yǔ)句中將這個(gè)變量重設(shè)為0。那么,循環(huán)完成后,可以檢查該變量是否仍然是1。如果是,則從沒進(jìn)入過(guò)if語(yǔ)句,這個(gè)數(shù)是素?cái)?shù)。我這里用int類型的變量isPrime來(lái)當(dāng)作一個(gè)標(biāo)志實(shí)現(xiàn)這個(gè)想法。

好了,結(jié)合上面的所有想法,我們開始寫代碼了:

#includestdio.h

int main(void)

unsigned long num;// 要檢查的數(shù)

unsigned long div;// 可能的約數(shù)

int isPrime;// 素?cái)?shù)的標(biāo)志,1代表是素?cái)?shù),0代表不是素?cái)?shù)

printf("Please enter an integer for analysis. ");

printf("Enter q to quit.\n");

while(scanf("%lu", num) == 1 num != 1)

for(div = 2, isPrime = 1;(div * div) = num; div++){

if(num % div == 0){// 如果能被div整除

if((div * div) != num){// 約數(shù)不相等

printf("%lu is divisible by %lu and %lu.\n", num, div, num / div);

}else{// 約數(shù)相同

printf("%lu is divisible by %lu.\n", num, div);

// 將isPrime設(shè)置為0,表示其不是一個(gè)素?cái)?shù)

isPrime = 0;

if(isPrime == 1){

printf("%lu 是素?cái)?shù).\n", num);

printf("Please enter another integer for analysis. ");

printf("Enter q to quit.\n");

printf("Bye.\n");

return 0;

這里有一個(gè)關(guān)鍵就是,在for循環(huán)控制表達(dá)式中使用了逗號(hào)運(yùn)算符,以針對(duì)每個(gè)新輸入的數(shù)將isPrime初始化為1。

分享文章:go語(yǔ)言判斷質(zhì)數(shù) 編程判斷質(zhì)數(shù)
文章位置:http://muchs.cn/article38/dophisp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供動(dòng)態(tài)網(wǎng)站、全網(wǎng)營(yíng)銷推廣、外貿(mào)網(wǎng)站建設(shè)、標(biāo)簽優(yōu)化、移動(dòng)網(wǎng)站建設(shè)、自適應(yīng)網(wǎng)站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

手機(jī)網(wǎng)站建設(shè)