【发布时间】:2015-05-05 11:57:27
【问题描述】:
我期待改进我的算法,以找到给定数字右侧的下一个素数。 我到目前为止是这样的:
int NextPrime(int a)
{
int i, j, count, num;
for (i = a + 1; 1; i++)
{
for (j = 2, count = 0; j <= i; j++)
{
if (i%j == 0)
{
count++;
}
}
if (count == 1)
{
return i;
break;
}
}
}
虽然这种算法在经常运行时效率不高。 有人可以就如何加速或改进算法提供建议。
【问题讨论】:
-
两个基本的加速是将 j 增加 2(从 3 开始,在测试 2 之后),因为只有 2 以外的奇数是素数。另外,只检查到数的平方根(因为任何数的因数之一是
-
在
count++;之后使用break;。 -
您是否尝试在内循环开始之前进行一些概率素性测试? en.wikipedia.org/wiki/Primality_test
标签: c++ performance algorithm