质数(prime number)又称素数,有无限个。除了1和它本身以外不再被其他的除数整除。根据算术基本定理,每一个比1大的整数,要么本身是一个质数,要么可以写成一系列质数的乘积,最小的质数是2
枚举法:
for(i = 2; i * i <= p; i++)
if(p % i == 0)
returnfalse;
returntrue;
优化一:除了2以外偶数都不是素数,所以每次i可以增加2
优化二:除了2、3以外,素数p除以6的余数只能是1或5,所以可以修改为每次交替增加2,4
速度为原来的若干倍.优化后106次一秒之内出解,107需要约10秒
include <iostream>
using namespace std;
bool lcm(int p)
{
if(p==2||p==3)
{
return true;
}
if(p%2==0||p%3==0)
{
return false;
}
for(int i=5,k=4; i*i<=p; i+=(k=6-k))
{
if(p%i==0)
{
return false;
}
else
{
return true;
}
}
}
int main()
{
int p1;
while(cin>>p1&&p1)
{
if(lcm(p1))
{
cout<<"yes"<<endl;
}
else
{
cout<<"no"<<endl;
}
}
return 0;
}
筛选素数