P3383 【模板】线性筛素数

来源:互联网 发布:网络映射计算机名 编辑:程序博客网 时间:2024/05/22 05:27

https://www.luogu.org/problem/show?pid=3383
题目描述

如题,给定一个范围N,你需要处理M个某数字是否为质数的询问(每个数字均在范围1-N内)

输入输出格式

输入格式:
第一行包含两个正整数N、M,分别表示查询的范围和查询的个数。

接下来M行每行包含一个不小于1且不大于N的整数,即询问概数是否为质数。

输出格式:
输出包含M行,每行为Yes或No,即依次为每一个询问的结果。

输入输出样例

输入样例#1:
100 5
2
3
4
91
97
输出样例#1:
Yes
Yes
No
No
Yes
说明

时空限制:500ms 128M

数据规模:

对于30%的数据:N<=10000,M<=10000

对于100%的数据:N<=10000000,M<=100000

样例说明:

N=100,说明接下来的询问数均不大于100且大于1。

所以2、3、97为质数,4、91非质数。

故依次输出Yes、Yes、No、No、Yes。
数据较弱没用筛选法也ac

#include<bits/stdc++.h>using namespace std;int n,m,a[10000000],i,j;int pd(int c){    if(c<2)  return 0;    for(i=2;i<=sqrt(c);i++)           if(c%i==0)               break;      if(i>sqrt(c))        return 1;        else         return 0;}int main(){             cin>>n>>m;             while(m--)             {                int x;cin>>x;                if(!pd(x)) cout<<"No"<<endl;                else                   cout<<"Yes"<<endl;             }                 return 0;}

一般筛选法

#include<bits/stdc++.h>using namespace std;int n,m,a[100000000],i,j,x;int main(){        cin>>n>>m;       a[1]=1;           for(i=2;i<=sqrt(n);i++)           {               if(!a[i])                for(j=i*i;j<=n;j+=i)                     a[j]=1;           }                 while(m--)                 {                     cin>>x;                   if(a[x]) cout<<"No"<<endl;                   else                        cout<<"Yes"<<endl;                 }                 return 0;}

欧拉法

#include<bits/stdc++.h>using namespace std;int n,m,a[100000000],i,j,x,p[10000000],t=1;int main(){        cin>>n>>m;        a[1]=1;           for(i=2;i<=n;i++)           {                if(!a[i]) p[t++]=i;            for(j=1;j<=t&&i*p[j]<=n;j++)            {                a[i*p[j]]=1;                if(i%p[j]==0)                     break;            }           }                 while(m--)                 {                     cin>>x;                   if(a[x]) cout<<"No"<<endl;                   else                        cout<<"Yes"<<endl;                 }                 return 0;}
原创粉丝点击