Eratosthenes筛法(埃氏筛法)

来源:互联网 发布:回家的路 林俊杰 知乎 编辑:程序博客网 时间:2024/06/15 11:35

一、朴素的筛法

#include<iostream>#include<istream>#include <string.h>#include<stdio.h>using namespace std;int const maxn = 100000;int vis[1000010];int main(){    memset(vis,0,sizeof(vis));    vis[0] = 1;    vis[1] = 1;    int n;    for(int i = 2 ;i <= maxn; i++)        for(int j = i*2; j <= maxn; j+=i)            vis[j] = 1;    scanf("%d",&n);    if(!vis[n])        printf("yes\n");    else        printf("no\n");    return 0;}

二、优化的筛法

#include<iostream>#include<istream>#include <string.h>#include <math.h>#include<stdio.h>using namespace std;int const maxn = 100000;int vis[1000010];int main(){    int n;    int m=sqrt(maxn+0.5);    memset(vis,0,sizeof(vis));    for(int i=0;i<2;i++)        vis[i]=1;    for(int i=2;i<=m;i++) if(!vis[i])        for(int j=i*i;j<=maxn;j+=i) vis[j]=1;    scanf("%d",&n);    if(!vis[n])        cout << "yes" <<endl;    else        cout << "no" << endl;    return 0;}
原创粉丝点击