HIHO #1295 : 数论二·Eular质数筛法

来源:互联网 发布:淘宝店如何卖网游装备 编辑:程序博客网 时间:2024/05/21 10:10

题目链接

欧拉筛法,效率O(n)

#include<bits/stdc++.h>using namespace std;#define cl(a,b) memset(a,b,sizeof(a))#define fastIO ios::sync_with_stdio(false);cin.tie(0);#define LL long long#define pb push_back#define gcd __gcd#define For(i,j,k) for(int i=(j);i<k;i++)#define lowbit(i) (i&(-i))#define _(x) printf("%d\n",x)const double EPS = 1e-8;const int maxn = 1e6+10;const int inf  = 1 << 28;/*欧拉筛法n范围,tot素数的个数ans:保存的素数*/bool vaild[maxn];void getPrime(int n,int&tot,int ans[]){    cl(vaild,true);    for(int i=2;i<=n;i++){        if(vaild[i]){            ans[++tot]=i;        }        for(int j=1;j<=tot && i*ans[j]<=n;j++){            vaild[i*ans[j]] = false;            if(i%ans[j] == 0)break;        }    }}int ans[maxn];int main(){    int n;scanf("%d",&n);    int tot = 0;    getPrime(n,tot,ans);    printf("%d\n",tot);    return 0;}
0 0
原创粉丝点击