【发布时间】:2018-09-07 03:29:50
【问题描述】:
我仍然是一个尝试获得 c++ 基础知识的初学者。我一直在编写一个控制台应用程序,它可以打印出特定范围内的素数,这里是代码(我正在使用 CodeBlocks ):
bool isInteger(double i)
{
int x = i;
if ( i/x == 1)
{
return true;
}else
{
return false;
}
}
int DivTimes(double i)
{
int counter = 0;
for (int y = 2; y <= i; y++)
{
if (isInteger(i/y))
{
counter ++;
}
}
return counter;
}
bool isPrime(double i)
{
if (DivTimes(i) > 1)
return false;
else
return true;
}
int main()
{
for(int i = 999999910; i <= 1000000000 ; i++)
{
if (isPrime(i))
cout << " " << i;
}
}
对于像 1E9 这样的大量数字,我的程序的性能变得非常缓慢,并且只使用了我 10% 的 CPU。所以,我想知道有什么方法可以让我的程序利用更多的 CPU 能力并提高程序性能?
【问题讨论】:
-
您可能想对素性的有效测试进行一些研究。
-
如果您仔细查看这 10%,您是否获得了计算机所有内核的 10% 和一个内核的约 100%?
-
半相关:为了获得最佳性能结果,请确保您在构建代码时启用并启用了优化。不太熟悉 Code::Blocks,但这可能就像告诉 Code::Blocks 生成“发布”版本一样简单。
-
用双打扔掉所有的东西。这些是完全不必要的,并且由于浮点错误而不能一直工作。要检查一个数字是否可以被另一个数字整除,只需检查
a % b == 0。查找在一定范围内生成素数的方法,因为有比您使用的算法更有效的算法。
标签: c++ performance cpu-usage