您的位置:首页 > 编程语言 > C语言/C++

【noip】【C++】关于素数或质数的两种常用判断算法;

2017-08-03 22:24 309 查看

【noip】【C++】关于素数或质数的两种常用判断算法;

1.第一种很简单,根据素数的定义来判断【维基百科是如此对素数进行定义:一个大于1的自然数,除了1和它本身外,不能被其他自然数(质数)整除

重要算法思想就是将待判数n分别除以 k[2,n-1],若发现 n%k!=0时,则可以判定该待判数n为真素数(质数);

c++算法实现:

bool(int n)//n为待判定数,如果该判定数为质数,则返回真,否则返回假。
{
for(int k=2;k<=n-1;k++)
{
if(n%k==0)
{
return false;
}
}
return true;
}//根据素数定义进行判断,复杂度为O(n);【应该是,复杂度我也不太会算】


2.第二种则根据(质数筛选定理):当待判数n不能够被不大于根号n的任何质数整除,则n是一个质数;

这个算法相对于上一个会减少很多不必要的判断。

“`

include

include // for sqrt()

define MAX 100

using namespace std;

int main() {

cout << 2 << endl; //2是质数

for (int i = 3; i <= MAX; i += 2) { //偶数不是质数,步长可以加大

float temp = static_cast(i);

int mid = static_cast(sqrt(temp));

int j;

for (j = 3; j <= mid; j += 2)//i是奇数,当然不能被偶数整除,步长也可以加大。

if (i % j == 0)

break;

if (j > mid)
cout << i << endl;
}
return 0;


}

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  c语言