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

来源:互联网 发布:淘宝直通车怎么测款 编辑:程序博客网 时间:2024/05/20 13:16

【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;  

}

原创粉丝点击