C語言判斷素數,判斷質素演算法

沸騰石灰發表於2020-12-04

1、判斷一個數是否為質數

思路:質數是指在大於1的自然數中,除了1和它本身以外不再有其他因數的自然數。所以從2開始進行求餘,在小於自然數本身數字裡沒有一個數字進行求餘數為0的,則證明輸入的自然數是質數,否則非質數

#include <stdio.h>
int main(){
    int a,b,i;
    b=0;//標記
    while (1){
        printf("請輸入一個大於1的正整數:");
        scanf("%d",&a);
        if(a>1) break;

    }
    for(i=2;i<a;i++){//質數是隻能被自己整除,i<a的時候
        if(a%i==0){//當出現i能被a整除,則說明不是質數
            b++;//b自增
        }
    }
    if(b==0){//判斷b是否有變化
        printf("%d是質數\n",a);
    }else {
        printf("%d不是質數\n",a);
    }
    return 0;
}

結果
在這裡插入圖片描述
在這裡插入圖片描述

2、找出一個大於1的自然數中所有的質數並輸出,計算總共多少個

思路:從該自然數開始進行判斷是否為質數,如果是質數則列印,接著自然數在大於1時迴圈做自減,再依次判斷是否為質數,如果是質數則列印,在通過一個變數的自增記錄為質數的個數

#include <stdio.h>
int main(){
    int a,b,c,i;
    b=0;
    scanf("%d",&a);
    for(a;a>1;a--){
        c=0;
        for(i=2;i<=a;i++){
            if(a%i==0){
                c++;
                if(a==i&&c==1){
                    printf("%d ",a);
                    b++;
                }
            }
        }
    }
    printf("\n總共質數為:%d",b);
    return 0;
}

結果
S1區間1——72,有素數18個,孿生素數7對。(2和3不計算在內,最後的數是孿中的也算在前面區間。)
在這裡插入圖片描述

3、計算大於2的正整數有哪些素陣列成,如45=3 *3 *5

思路:素數一般指質數。質數是指在大於1的自然數中,除了1和它本身以外不再有其他因數的自然數。 因此就是把數字拆分成一個個質數數進行相乘,因此需從2開始進行求餘數為0情況,如果餘數為0,則自然數(a)更新為自然數(a)/2的值,進行進行下一輪求餘數為0,餘數不為0,在進行2的自增,繼續求餘為0,直到2變成一個大於自然數(a)的數值在停止求餘為0的判斷。

#include <stdio.h>
int main(){
    int a,b;
    printf("請輸入大於2的正整數:");
    while(1){
        scanf("%d",&a);//a是鍵盤輸入的數字
        if(a>2) break;
        else printf("請輸入大於2的正整數:");
    }
    b=2;//b初始為2
    printf("%d=",a);//列印a=
    while(b<=a){//b不能大於a,每次迴圈a的資料或者b的資料會進行更新
        if(a%b==0){//當b能被a整除且b不等於0
            printf("%d*",b);//列印
            a=a/b;//a更新 a=a/b
        }else if(a%b==0&&a==b){//b能被a整除,且a=b
            printf("%d",b);
            a=a/b;//a更新後,a=1,迴圈結束
        }else{
            b++;//無法整除,b自增
        }
    }
    return 0;
}

結果

在這裡插入圖片描述在這裡插入圖片描述

相關文章