Nix*_*xoN 2 c++ algorithm primes
大家好!
我来到这个算法是关于如何检查数字是否为素数,可能对我来说很好,但我想知道它是否可以改进
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;
}
Run Code Online (Sandbox Code Playgroud)
提前致谢
小智 5
通过观察除 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';
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
3858 次 |
最近记录: |