获取素数常规写法:
const int maxn=100;
bool prime[maxn];
bool isPrime(int n)
{
if(n<=1) return false;
for(int i=2;i*i<=n;i++)
{
if(n%i==0) return false;
}
return true;
}
bool getPrime()
{
for(int i=0;i<maxn;i++)
{
prime[i]=isPrime(i);
}
}
一般如果不是数特别大,上边的算法都足够了。
但是如果有特别大的数,我们可以用下面这个算法 ——
素数筛法:
注意最中间的一个循环,可以让 j = i * i 开始。
因为对于 j = i * k(k<i)来说,它一定已经被k筛掉过了,所以不必重复
const int maxn=100;
bool prime[maxn];
void getPrime()
{
for(int i=2;i<maxn;i++)//先将这些数都当做素数
{
prime[i]=true;
}
for(int i=2;i<maxn;i++)
{
if(prime[i])
{
// for(int j=i+i;j<=maxn;j+=i)
for(int j=i*i;j<=maxn;j+=i)
{
prime[j]=false;
}
}
}
}