所有质数,质数表全部质数

首页 > 影视动漫 > 作者:YD1662023-10-29 14:44:31

所有质数,质数表全部质数(1)

问题:输入一个正整数 N(N > 2),求小于 N 的全部质数。

质数,就是除了1和它本身外不存在其他因子的数。

1、基本循环法

循环法:利用质数的定义,循环判断该数除以比它小的每个自然数(大于1),如果有能被它整除的,则它就不是质数。

示例代码如下:

#include <iostream> using namespace std; int main() { int N = 50; int sumStep = 0; // 统计迭代次数 cout << 2 << endl; // 2 是质数 for (int i = 3; i < N; i) { bool flag = true; // 假设是质数 for (int j = 2; j < i; j) { sumStep = sumStep 1; if (!(i % j)) { // 找到能被整除的 flag = false; break; } } if (flag) { cout << i << endl; } } cout << "sumStep: " << sumStep << endl; return 0; }

运行结果如下:

所有质数,质数表全部质数(2)

2、算法优化

可以看到,当 N = 50 时,上述算法总共进行了349次循环。

在上述基本算法的基础上,可以对循环进行一些优化,减少循环次数:

代码优化如下:

#include <iostream> #include <cmath> using namespace std; int main() { int N = 50; int sumStep = 0; // 统计迭代次数 cout << 2 << endl; // 2 是质数 for (int i = 3; i < N; i = 2) { bool flag = true; // 假设是质数 int jStop = sqrt(i); // 终止条件 for (int j = 3; j <= jStop; j = 2) { sumStep = sumStep 1; if (!(i % j)) { // 找到能被整除的 flag = false; break; } } if (flag) { cout << i << endl; } } cout << "sumStep: " << sumStep << endl; return 0; }

运行结果如下:

所有质数,质数表全部质数(3)

优化后,只需31次循环,相比原来的349次,大大减少了循环次数,提升了算法效率。

相关阅读

栏目热文

文档排行

本站推荐

Copyright © 2018 - 2021 www.yd166.com., All Rights Reserved.