概述
http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=34870
经典的埃氏筛法。
先将2~N的数全部假设为素数。
循环取出最小的素数i,并将i的倍数设为非素数,知道i等于N为止。
#include <iostream>
#include <cstdio>
using namespace std;
const int MAX_N = 999999+1;
int N, M;
int prime[MAX_N];
bool is_prime[MAX_N];
int sieve(int n)
{
int tot = 0;
for(int i = 0; i <= n; i++) is_prime[i] = true;
for(int i = 2; i <= n; i++)
if(is_prime[i])
{
prime[tot++] = i;
for(int j = 2*i; j <= n; j += i)
is_prime[j] = false;
}
return tot;
}
int main()
{
//freopen("in.txt", "r", stdin);
while(scanf("%d", &N) != EOF)
printf("%dn", sieve(N));
return 0;
}
最后
以上就是糊涂酸奶为你收集整理的AOJ - 0009 - Prime Number(素数筛法)的全部内容,希望文章能够帮你解决AOJ - 0009 - Prime Number(素数筛法)所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复