溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

C語言中如何求素數(shù)

發(fā)布時間:2022-03-10 14:20:50 來源:億速云 閱讀:369 作者:iii 欄目:開發(fā)技術(shù)

這篇文章主要講解了“C語言中如何求素數(shù)”,文中的講解內(nèi)容簡單清晰,易于學(xué)習(xí)與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學(xué)習(xí)“C語言中如何求素數(shù)”吧!

前言

素數(shù)又稱質(zhì)數(shù)。所謂素數(shù)是指除了 1 和它本身以外,不能被任何整數(shù)整除的數(shù),例如17就是素數(shù),因?yàn)樗荒鼙?2~16 的任一整數(shù)整除。

思路1):因此判斷一個整數(shù)m是否是素數(shù),只需把 m 被 2 ~ m-1 之間的每一個整數(shù)去除,如果都不能被整除,那么 m 就是一個素數(shù)。

思路2):判斷方法還可以簡化。m 不必被 2 ~ m-1 之間的每一個整數(shù)去除,只需被 2 ~  之間的每一個整數(shù)去除就可以了。如果 m 不能被 2 ~  間任一整數(shù)整除,m 必定是素數(shù)。例如判別 17 是是否為素數(shù),只需使 17 被 2~4 之間的每一個整數(shù)去除,由于都不能整除,可以判定 17 是素數(shù)。

原因:因?yàn)槿绻?m 能被 2 ~ m-1 之間任一整數(shù)整除,其二個因子必定有一個小于或等于 ,另一個大于或等于 。例如 16 能被 2、4、8 整除,16=2*8,2 小于 4,8 大于 4,16=4*4,4=√16,因此只需判定在 2~4 之間有無因子即可。

思路1實(shí)現(xiàn):

#include <stdio.h>
int main() {
    int n;
    printf("請輸入一個1-100之間的整數(shù):\n");
    scanf("%d", &n);
 
    int m = 0;
    for (int i = 2; i < n; i++ ) {
        if(n % i  == 0) {
            m++;
        }
    }
    if (m == 0) {
        printf("%d是素數(shù)\n", n);
    } else {
        printf("%d不是素數(shù)\n", n);
    }
    return 0;
}

思路2實(shí)現(xiàn):

#include <stdio.h>
#include <math.h>
int main() {
    int n;
    printf("請輸入一個1-100之間的整數(shù):\n");
    scanf("%d", &n);
 
    int i = 0;
    int q = sqrt(n);
    for (i = 2; i <= q; i++ ) {
        if(n % i  == 0) {
            break;
        }
    }
    if (i > q) {
        printf("%d是素數(shù)\n", n);
    } else {
        printf("%d不是素數(shù)\n", n);
    }
 
    return 0;
}

《C與指針》4.14 - 2:

打印1~100之間所有質(zhì)數(shù):

#include <stdio.h>
int main() {
    int num, divisor;
    printf("1, 2");
    for (num = 3; num <= 100; num += 2) {
        for(divisor = 3; divisor < num; divisor +=2 ) {
            if (num % divisor == 0) {
                break;
            }
        }
 
        if(divisor >= num) {
            printf(", %d", num);
        }
    }
    printf("\n");
    return 0;
}

結(jié)果:

1, 2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97

補(bǔ)充:判斷素數(shù)的4種方法實(shí)例

#include<stdio.h>
#include<math.h>
//方法一:從1-n挨個判斷;
 bool isPrimel_1(int n) 
{	for(int i=2;i<n;i++)
	if(n%i==0)
	return false;
	return true;
}

//方法二: 將被判斷數(shù)n,進(jìn)行開方作為判斷結(jié)束的條件,
//因?yàn)殚_方后的數(shù),是n的最大因子,最大因子之后的數(shù)對判斷該數(shù)是否是素數(shù)沒有意義。

bool isPrimel_2(int n)  
{	for(int i=2;i<sqrt(n);i++)
	if(n%i==0)
	return false;
	return true;
}

//方法三: 只需要判斷到該數(shù)的一半即可,如果超過它本身的一半,
//進(jìn)行求余的結(jié)果將永遠(yuǎn)不會為0,除非是該數(shù)對該數(shù)的求余。

bool isPrimel_3(int n)  
{   int i;
    if(n%2==0)
    return 0;
    for(i=3;i=n/2;i+=2){
	 if(n%i==0)
     return 0;
     return 1;
}
}

 //方法四:從3-n,只判斷奇數(shù),先對一個數(shù)進(jìn)行奇偶判斷,若是奇數(shù),
 //只對從3到它本身的奇數(shù)進(jìn)行求余計算,同理若是偶數(shù),一定不是素數(shù)。
 
bool isPrimel_4(int n)
{   int i,j=1;
    if(n%2==0)
    return 0;
    else{
    for(i=3;i<=n;i=i+2){
	 if(n%i==0)	
	 j=i;
	 break;
	}
}
   if(j==n)
   return 0;
   return 1;
}

int  main()
{
	int n;
	printf("請輸入一個數(shù):");
	scanf("%d",&n); 
	printf("%d,%d,%d,%d\n",isPrimel_1(n),isPrimel_2(n),isPrimel_3(n),isPrimel_4(n));
	return 0;
}

感謝各位的閱讀,以上就是“C語言中如何求素數(shù)”的內(nèi)容了,經(jīng)過本文的學(xué)習(xí)后,相信大家對C語言中如何求素數(shù)這一問題有了更深刻的體會,具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是億速云,小編將為大家推送更多相關(guān)知識點(diǎn)的文章,歡迎關(guān)注!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI