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

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/cyg2001/article/details/76651779

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

}

展开阅读全文

没有更多推荐了,返回首页