埃氏素筛对内存的依赖很大 ,筛选多大的素数就要开多大的数组,
该算法对n较大时很有效解
bool isprime[MAXN];// 如果氏true 表示下标氏素数
int p[MAXN];// 存素数
int np;
void prime(int n)// 此处 筛选素数
{
memset(isprime, true, sizeof isprime);
memset(p, 0, sizeof p);
np = 0;
isprime[0] = isprime[1] = false;
for (int i = 2; i <= n; i++)
{
if (isprime[i]) p[np++] = i;
for (int j = 0; j < np && p[j]*i<= n; j++)// 现有素数的i倍数 不是素数
{
isprime[p[j]*i] = false;
if( i % p[j] == 0) break;//
}
}
}
bool Brute_Force3(int n)// 朴素
{
for (int i=0; p[i]*p[i]<=n; i++)// 如果能被素数整除 表示不是素数
if (n%p[i]==0)
return false;
return true;
}