#include<iostream>
#include<cmath>
using namespace std;
bool IsPrime(unsigned int);
int main()
{
int a;
cin>>a;
if(IsPrime(a))
cout<<"是素数"<<endl;
else cout<<"不是素数"<<endl;
return 0;
}
bool IsPrime(unsigned int n)
{
if(n==2) return true;
unsigned int i = 3 , t = (unsigned int)sqrt(n) + 1;
if(n%2 == 0)
return false;
while(i<=t)
{
if(n%i==0)
return false;
i+=2;
}
return true;
}
找到1到n之间的所有质数,每次迭代删除最小质数的倍数。
vector<int> prim(int n)
{
vector<int> allNum(n);
for (int i = 1; i < n; i++)
allNum[i] = i + 1;
int p = 0;
while (1)
{
int i = p;
for (; i < n; i++)
{
if (allNum[i] != 0)
{
p = allNum[i];
break;
}
}
if (i == n)
break;
for (int i = p; i < n; i++)
if (allNum[i] != 0 && allNum[i] % p == 0)
allNum[i] = 0;
}
vector<int> vout;
for (int i = 0; i < n; i++)
if (allNum[i] != 0)
vout.push_back(allNum[i]);
return vout;
}