c++ - 检查数字是否为素数的算法
问题描述
大家好!
我来到这个算法如何检查数字是否为素数,可能对我来说没问题,但我想知道它是否可以改进
bool isPrime(int num)
{
bool isPrime = 1;
if (num <= 0)
{
return 0;
}
if (num == 1)
{
return 0;
}
for (int i = 2; i <= sqrt(num); ++i)
{
if (num % i == 0)
{
isPrime = 0;
}
}
return isPrime;
}
提前致谢
解决方案
通过观察除 2 和 3 之外的所有素数的形式为 6k ± 1,可以进一步改进该算法。这是因为对于某个整数 k 和 i = -,所有整数都可以表示为 (6k + i) 1、0、1、2、3 或 4;2 除 (6k + 0), (6k + 2), (6k + 4); 和 3 个除法 (6k + 3)。所以更有效的方法是测试 n 是否能被 2 或 3 整除,然后检查 6k ± 1 形式的所有数字
上述实现:
#include <iostream>
bool isPrime(int n) {
// Corner cases
if(n <= 1) return false;
if(n <= 3) return true;
// This is checked so that we can skip
// middle five numbers in below loop
if(n % 2 == 0 || n % 3 == 0) return false;
for(int i = 5; i * i <= n; i = i + 6)
if(n % i == 0 || n % (i + 2) == 0) return false;
return true;
}
// Driver Program to test above function
int main() {
std::cout << std::boolalpha
<< isPrime(11) << '\n'
<< isPrime(15) << '\n';
}
推荐阅读
- python - 如何安装 requirements.txt
- python - 阻止 Tweepy 脚本回复相同的提及
- swift - 我们如何在同一个控制器上使用 2 个 UIPicker?
- elasticsearch - Elasticsearch 嵌套数据搜索性能
- reactjs - 平面列表参考未定义反应原生
- javascript - 捕获 HTML5 流并提取音频以进行回放
- javascript - LocalStorage 在 WordPress 中不起作用
- python - seaborn stripplot 共享 x 轴
- c++ - mainwindow.cpp:(.text+0x9): 未定义引用,QT 项目在单元测试期间失败
- python - Pandas - 用指定的最小值和最大值进行插值