线性筛素数
#include<iostream>
using namespace std;
typedef long long ll;
int prime[100000000];
int notprime[100000000];
int Psize = 0;
void getPrime(ll n)
{
for (ll i = 2; i <= n; i++)
{
if (!notprime[i])
{
prime[Psize++] = i;
for (ll j = i * i; j <= n; j += i)notprime[j] = 1;
}
}
}
int main()
{
ll n, p;
scanf_s("%lld %lld", &n, &p);
getPrime(n);
下面也是线性筛,两者效率差不多
#include<stdio.h>
int notprime[10000000];
int prime[10000000];
int cnt = 0;
int main()
{
for (int i = 2; i <= 10000000; i++)
{
if (notprime[i])continue;
for (int j = i; j <= 10000000 / i; j++)
{
notprime[i * j] = 1;
}
if (!notprime[i])
prime[++cnt] = i;
}
}