HDU 筛素数

来源:互联网 发布:iphone不能用蜂窝数据 编辑:程序博客网 时间:2024/05/15 23:43

1、输出一组数中素数的个数

#include<iostream>#include<cmath>using namespace std;int main(){    int n,a;    while(cin>>n)    {        int cnt=0;        while(n--)        {            cin>>a;            int i=2;            while(a%i&&i<=int(sqrt(double(a))))            {                i++;            }            if(i>int(sqrt(double(a))))                cnt++;            }            cout<<cnt<<endl;        }    return 0;}
直接循环遍历就不会超时。

2、筛素数

const int MAXN = 1000010;
int prime[MAXN + 1];
void getPrime()
{
    memset(prime, 0, sizeof(prime));                                           //初始化赋0,假设所有数都为素数
    for(int i = 2; i <= MAXN / 2; i++)                                                  //筛素数从2开始,利用2是素数这一特性
    {
        if(!prime[i])                                                                                //如果数i是素数
            prime[++prime[0]] = i;                                                              //记录素数个数++
        for(int j = 1; j <= prime[0] && prime[j] <= MAXN / i; j++)   //j<素数个数,防止重复删除非素数
        {
            prime[prime[j] * i] = 1;                                                         //一部分较小的素数倍数更改为不为素数
            if(i % prime[j] == 0)
                break;                                                                                   //i可以整除素数,跳出循环
        }
    }
}

原创粉丝点击