AOJ_0009(Prime Number)

题目链接http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=34870


这道题是求给定一个整数n,让你求小于它的素数个数。采取打表法处理,ac代码如下:

#include <cstdio>
#include <iostream>
#include <string>
#include <cstring>

using namespace std;
typedef long long int ll;
const int maxn = 10000000 + 10;
ll prime[maxn / 10];
bool is_prime[maxn];

void get_prime()
{
	int i, j;
	memset(prime, 0, sizeof(prime));
	for (i = 0; i<maxn; i++)
		is_prime[i] = true;
	is_prime[0] = is_prime[1] = false;
	for (i = 2; i<maxn; i++)
	{
		if (is_prime[i])               //如果是素数
		{
			prime[++prime[0]] = i;    //prime[0]用来记录素数的个数
		}
		for (j = i * 2; j<maxn; j += i)      //每次增加i,素数筛法
		{
			is_prime[j] = false;
		}
	}
}
int main(void)
{
	//freopen("in.txt", "r", stdin);
	get_prime();
	ll n;

	while (scanf("%lld", &n) != EOF)
	{
		int i;
		for (i = 1; i<maxn / 10; i++)
		{
			if (prime[i]>n)                   //i不能从0开始,因为prime[0]记录的是素数的个数
				break;                        //出来就是第一个大于n的素数,i就代表个数
		}
		printf("%d\n", i - 1);
	}
	return 0;
}

你可能感兴趣的:(AOJ_0009(Prime Number))