C++求質數的方法


【第一種情況】判斷某個數是不是質數,多用於單次判斷某個數是不是質數;

#include<stdio.h>
#include<time.h>
#include<math.h>
int IsPrime(int n){
    int i;
        if (n==1) return 0;
        if (n==2) return 1;
    if(n%2==0) return 0;
    for(i = 3;i <= sqrt(n);i+=2){
        if(n%i==0) return 0;
    }
    return 1; 
}

int main(){
    int n,i;
    int t1 = clock();
    for(i = 1;i<=100000;i++){
        if(IsPrime(i)) printf(" %d ",i);
    }
    int t2 = clock();
    printf("\n運行時間:%d\n",t2-t1);
} 

【第二種情況】打表 多用於要判斷多個數是不是質數,那么把質數先求出來。

#include<stdio.h>
#include<time.h>
#include<math.h>
#define N 100000
int prime[100000];
int a[N];
void init(){
    int i,j,len=0;
    prime[0]=1;
    prime[1]=1;
    for(i = 2;i < N ;i++){
        prime[i] = 0;
    }
    for(i = 2; i < N; i++)
    {
        if(!prime[i]){
            a[len++] = i;
        } 
        for(j = 0; j< len &&a [j]*i < N; j++)
        {
            prime[a[j]*i] = 1;
            if(i % a[j] == 0) break;
        }
    }
}

int main(){
    int i;
    int t1 = clock();
    init();
    for(i=0;i<N;i++){
        if(!prime[i])printf("%d是素數\n",i);
    }
    int t2 = clock();
    printf("\n運行時間:%d\n",t2-t1);
} 

上面的方法思路是把素數從頭開始計算素數,然后把已經計算出來的素數倍數去掉,依此增加素數的數量。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM