zoukankan      html  css  js  c++  java
  • 线性筛求素数 (板子

    详细见:http://blog.csdn.net/nk_test/article/details/46242401

    #include<bits/stdc++.h>
    using namespace std;
    const int maxn = 1e7;
    bool vis[maxn];
    int prime[maxn];
    int f(int n)//计算从1到n的素数个数
    {
        int cnt =0;
        memset(vis,0,sizeof(vis));
        for(int i=2;i<=n;i++)
        {
            if(!vis[i])
                prime[cnt++] = i;
            for(int j=0;j<cnt && i*prime[j]<=n;j++)
            {
                vis[i*prime[j]]=1;
                if(i%prime[j]==0)
                    break;
            }
        }
        return cnt;
    }
    /*当 i 能整除 prime[j]
    那么 i*prime[j+1] 这个合数肯定被 prime[j] 乘以某个数筛掉。
    因为i中含有prime[j], prime[j] 比 prime[j+1] 小。*/
    
    int main ()
    {
        int n;cin>>n;
        cout<<f(n)<<endl;
        return 0;
    }
  • 相关阅读:
    hdu 1058
    hdu 1003
    hdu 1500
    hdu 1083 最大匹配
    hdu 1370 中国剩余定理
    hdu 1299 数论 分解素因子
    hdu 1299
    poj 1144 求割点
    hdu 1068 最大独立集合
    hdu 1054
  • 原文地址:https://www.cnblogs.com/Draymonder/p/7428328.html
Copyright © 2011-2022 走看看