ZZUSOFTOJ Seeking Prime Numbers Second Bomb (Prime Sieve)

1597: Finding prime numbers second bomb

analysis: 

The complex problem of finding prime numbers requires finding all the prime numbers within the maximum range of the radical, and then using these prime numbers to filter a and b one by one

The number between.

 

Code:

#include <bits/stdc++.h>
using namespace std;

#define max1 1000007
#define max2 10000007
bool prime[max1], big_prime[max2];//分别是1e6内素数和a-b之间素数

void init()//求出1e6内所以素数
{
	memset(prime, 1, sizeof(prime));
	memset(big_prime, 1, sizeof(big_prime));//1为素数,0为非素数
	prime[0] = prime[1] = 0;//特殊情况,0和1不是素数
	for (int i = 2; i*i<max1; i++)
	{
		if (prime[i])
		{
			for (int j = i*i; j<max1; j += i)
			{
				prime[j] = 0;
			}
		}
	}
}

int main()
{
	init();
	long long head, tail;
	cin >> head >> tail;
	for (int i = 2; i<max1; i++)
	{
		if (prime[i])
		{
			for (long long j = head / i; j*i <= tail; j++)
			{
				if (j*i >= head&&j>1)big_prime[j*i - head] = 0;
			}
		}
	}
	if (head == 1)big_prime[0] = 0;//特殊情况
	int ans = 0;
	for (int i = 0; i <= tail - head; i++)
		if (big_prime[i])
			ans++;

	cout << ans;
	return 0;
}

 

Guess you like

Origin blog.csdn.net/qq_43700916/article/details/88671855