一、100以内的素数获取(1):
前提:复杂度不超过。
#include<stdio.h>
#include <math.h>
bool isPrime(int n){//判断n是否为素数
if(n<=1)return false;
int sqr=(int)sqrt(1.0*n);//求根号n
for(int i=2;i<=sqr;i++) {
if(n%i==0)return false;
}
return true;
}
int prime[101],pNum=0;
bool p[101] ={0};
void Find_Prime(){//求素数表
for(int i=1;i<101;i++){
if(isPrime(i)==true){
prime[pNum++]=i;
p[i]=true;
}
}
}
int main(){
Find_Prime();//调用求素数表的函数
for(int i=0;i<pNum;i++){
printf("%d",prime[i]);
printf(" ");
}
return 0;
}
得到:
其实我自己也打了一份,但是不知道哪里出了问题,得到的答案是错的。
一、100以内的素数获取(2)——筛法:
#include<stdio.h>
const int maxn=101;
int prime[maxn],pNum=0;
bool p[maxn]={0};
void Find_Prime(){
for(int i=2;i<maxn;i++){
if(p[i]==false){//如果i没有被筛,则i为素数,放入素数表中,
prime[pNum++]=i;
for(int j=i+i;j<maxn;j+=i)//计算i的倍数
{
p[j]=true;//i的所有倍数即j都不是素数
}
}
}
}
int main(){
Find_Prime();//调用求素数的函数
for(int i=0;i<pNum;i++){
printf("%d",prime[i]);
printf(" ");
} return 0;
}
参照:《算法笔记》——胡凡。