//求解100以内的所有素数,复杂度对n不超过10^5的大小是没有问题的
#include <cstdio>
#include <cmath>
int prime[101],num=0;
int is_prime(int n){
int m=round(sqrt(n));
if(n<=1) return 0;
for(int i=2;i<=m;i++)
if(n%i==0) return 0;
return 1;
}
void find_prime(){
for(int i=1;i<=100;i++)
if(is_prime(i)) prime[num++]=i;
}
int main(){
find_prime();
for(int i=0;i<num;i++) printf("%d ",prime[i]);
printf("\n");
return 0;
}
//埃氏筛法求100以内的所有素数
#include <cstdio>
const int maxn=101;
int prime[maxn],num=0;
int vis[maxn]={0};
void find_prime(){
for(int i=2;i<maxn;i++){
if(!vis[i]){
prime[num++]=i;
for(int j=i*2;j<maxn;j+=i) vis[j]=1;
}
}
}
int main(){
find_prime();
for(int i=0;i<num;i++) printf("%d ",prime[i]);
printf("\n");
return 0;
}
//改进后的埃氏筛法
#include <cstdio>
#include <cmath>
const int maxn=101;
int prime[maxn],num=0;
bool vis[maxn]={0};
void find_prime(){
int m=round(sqrt(maxn-1));
for(int i=2;i<=m;i++){
if(!vis[i]){
for(int j=i*i;j<maxn;j+=i) vis[j]=1;
}
}
}
int main(){
find_prime();
for(int i=2;i<maxn;i++){
if(!vis[i]) prime[num++]=i;
}
for(int i=0;i<num;i++) printf("%d ",prime[i]);
printf("\n");
return 0;
}