素数筛选法
程序员文章站
2024-03-21 15:14:40
...
一、基础例题
#include<stdio.h>
#include<math.h>
bool judge(int x){
if(x<1) return false;
int bound=(int)sqrt(x)+1;
for(int i=2;i<bound;i++){
if(x%i==0) return false;
}
return true;
}
int main(){
int x;
while(scanf("%d",&x)!=EOF){
puts(judge(x)? "yes":"no");
}
}
二、提升例题
#include<stdio.h>
int prime[10000];//保存筛选的素数
int primeSize;
bool mark[10001];//若mark[x]为true 则表示X已经被标记为非素数
void init(){
for(int i=1;i<=10000;i++){
mark[i]=false;
}
primeSize=0;
for(int i=2;i<=10000;i++){
if(mark[i]==true) continue;
prime[primeSize++]=i;
for(int j=i*i;j<=10000;j+=i){
mark[j]=true;
}
}
}
int main(){
init();
int n;
while(scanf("%d",&n)!=EOF){
bool isoutput=false;
for(int i=0;i<primeSize;i++){
if(prime[i]<n&&prime[i]%10==1){
if(isoutput==false){
isoutput=true;
printf("%d",prime[i]);
}
else printf(" %d",prime[i]);
}
}
if(isoutput==false){
printf("-1\n");
}
else printf("\n");
}
}