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);
} 

上面的方法思路是把素数从头开始计算素数,然后把已经计算出来的素数倍数去掉,依此增加素数的数量。

posted @ 2019-02-17 12:54  世子抱瑜玉  阅读(10547)  评论(0编辑  收藏  举报