#include<iostream>#include<cmath>usingnamespace std;boolisprime(int N){if(N <=1)returnfalse;int sqr =(int)sqrt(1.0* N);for(int i =2; i <= sqr; i++){if(N % i ==0)returnfalse;}returntrue;}intmain(){int N;
cin >> N;if(isprime(N))printf("%d is a prime\n", N);elseprintf("%d is not a prime\n", N);return0;}
输出某范围内的素数以【1,N】为例:
暴力筛法:(时间复杂度:On*n)
#include<iostream>#include<cmath>usingnamespace std;boolisprime(int n){if(n <=1)returnfalse;int sqr =(int)sqrt(1.0* n);for(int i =2; i <= sqr; i++){if(n % i ==0)returnfalse;}returntrue;}intmain(){int N;
cin >> N;int prime[10000];int num =0;for(int i =0; i <= N; i++){if(isprime(i)){
prime[num++]= i;}}int count =0;for(int i =0; i < num; i++){printf("%6d%c", prime[i], i == num -1?'\n':' ');
count++;if(count %5==0)printf("\n");}return0;}
埃氏筛法:(时间复杂度:Onlogn)
#include<iostream>usingnamespace std;intmain(){int N;
cin >> N;int prime[10000];bool hash[100001]={false};int num =0;for(int i =2; i <= N; i++){if(hash[i]==false)
prime[num++]= i;{for(int j = i + i; j <= N; j += i){
hash[j]=true;}}}int count =0;for(int i =0; i < num; i++){printf("%6d%c", prime[i], i == num -1?'\n':' ');
count++;if(count %5==0)printf("\n");}return0;}