正常的判断函数:
bool is_prime(int n)
{
int i;
if(n <= 1)
{
return false;
}
for(i=2;i*i<=n;i++)
{
if(n % i== 0)
{
return false;
}
}
return true;
}
输入一个数即可判断是否为素数。
省时间复杂度的Eratosthenes素数判断方法:
#include <iostream>
using namespace std;
const int maxnum=1000;
int main()
{
int i,j,c=0;
int prime[maxnum+1]; //定义保存素数的数组
for(i=2;i<=maxnum;i++)
prime[i]=1; //将保存素数的数组中的数全部标记为 1 这个 1 代表我是素数
for(i=2;i*i<=maxnum;i++) //循环处理前i个
{
if(prime[i]==1) //若为素数,则进行赛选
{
for(j=2*i;j<=maxnum;j++) //进行反标记
{
if(!prime[j])continue; //若prime[j]已经是反标记完的,就继续进行
if(j%i==0) //如果j可以整除,对其进行反标记
prime[j]=0;
}
}
}
for(i=2;i<maxnum;i++)
{
if(prime[i])
{
cout<<i<<' ';
c++;
if(c%10==0)
cout<<endl;
}
}
cout<<"有"<<c<<"个素数!";
}
Eratosthenes素数判断方法可以更简便的求一定范围的素数。
看懂了这段代码大家会有很大的感触!