天天看點

判斷素數類問題彙總

(注:暫時先記錄這些問題,後期再持續更新)

1,判斷正整數m是否為素數

int i,m;
    printf("Enter a number:");
    scanf("%d",&m);
    for(i=2;i<=m/2;i++)
        if(m%i == 0)
            break;  //若m能被某個i整除,則m不是素數,提前結束循環
    if(i > m/2&&m != 1)  //若循環正常結束,說明m不能被任何一個i整除
        printf("%d is a prime number!\n",m);
    else
        printf("No!\n");
        
    return 0;       
判斷素數類問題彙總
判斷素數類問題彙總

2,使用嵌套循環求100以内的全部素數

int count,i,m,n;
    count = 0;  //記錄素數的個數,用于控制輸出格式
    for(m=2;m<=100;m++){
        n = sqrt(m);
        for(i=2;i<=n;i++)
            if(m%i == 0)
                break;
        if(i>n){  //如果m是素數 
            printf("%6d",m);  //輸出m
            count++;  //累加已經輸出的素數個數 
            if(count%10 == 0)  //如果count是10的倍數,換行
                printf("\n"); 
        }
    } 
    printf("\n");
    return 0;      
判斷素數類問題彙總

3,使用函數求100以内的全部素數

#include<stdio.h>
#include<math.h>
int main(void)
{
    int count,m;
    int prime(int m);  //函數聲明
    count = 0;  //記錄素數的個數,用于控制輸出格式
    for(m=2;m<=100;m++){
        if(prime(m) != 0){  //調用prime(m)判斷m是否為素數 
            printf("%6d",m);  //輸出m
            count++;  //累加已經輸出的素數個數 
            if(count%10 == 0)  //如果count是10的倍數,換行
                printf("\n"); 
        }
    } 
    printf("\n"); 
} 

/* 定義判斷素數的函數,如果m是素數則傳回1,否則傳回0 */
int prime(int m)
{
    int i,n;
    if(m == 1) return 0;  //1不是素數,傳回0
    n = sqrt(m);
    for(i=2;i<=n;i++){
        if(m%i == 0){  //如果m不是素數 
            return 0;  //傳回0 
        }
        return 1;
    } 
}