分别用定义法和筛选法求素数,第一种适合判定单个素数,第二种适合判断区间内素数。
#include <iostream>
#include <cmath>
using namespace std;
/*
定义法求素数
*/
bool primeNum1(int x)
{
int i;
if(x>0&&x<=3)
{
return true;
}
if(x%2==0)//如果是2的倍数返回false
{
return false;
}
for(i=3;i<=sqrt(x);i=i+2)//从3开始每次跳两步到参数的平方根
{
if(x%i==0)
{
return false;
}
}
return true;
}
/*
筛选法求素数
*/
bool primeNum2(int x)
{
int i,j,k;
bool *isprimes = new bool[x+1];
for(k=2; k<=x; k++)
{
isprimes[k] = true;
}
for(i=2; i<=x; i++)
{
if(isprimes[i])
{
for(j=2;i*j<=x;j++)
{
isprimes[i*j] = false;
}
}
}
return isprimes[x];
}
int main()
{
int x;
cin >> x;
if(primeNum1(x))
{
cout << "YES";
}else
{
cout << "NO";
}
if(primeNum2(x))
{
cout << "YES";
}else
{
cout << "NO";
}
return 0;
}