求素数的两种方法效率最高(c++)
(一)常规方法
给定一个数n要求它是否为素数,只需用n依次初从2到根号n,如果都不能被整除那么该数为素数。
代码如下:
#include<iostream>
#include<cmath>
using namespace std;
int main()
{
int n,a;
cin >> n;
for(int i = 2; i <= sqrt(n); i++)
{
if(n%i==0)
{
cout << "no" << endl;
break;
}
cout << "yes" << endl;
}
return 0;
}
(二)筛法求素数
把2到n中所有的数列出来,从2开始,现划掉n以内2所有的倍数,从下一个剩下的数开始依次划掉该数的倍数。最后剩下的都是素数。
代码如下:
#include <iostream>
using namespace std;
int main()
{
int n;
cin >> n;
bool isprime[n+10];
for(int i = 2; i <= n; i ++)
{
isprime[i] = 1;
}
for(int i = 2; i <= n; i++)
{
if(isprime[i])
{
for(int j = 2*i; j <= n; j+=i)
{
isprime[j]=0;
}
}
}
for(int i=2;i<=n;i++)
{
if(isprime[i])
{
cout << i << endl;
}
}
return 0;
}