【发布时间】:2020-10-07 23:15:18
【问题描述】:
我在 C 中编写了一个简单的 for 循环来查找输入的数字是否为质数。运行时,即使输入简单的值,如 7、13 等,程序也只是坐在上面,似乎正在处理一些巨大的东西。我有一个 i53340M,所以处理能力真的不是问题。 CPU 使用率在所有内核上飙升至 25%,即使等待几分钟后我也看不到任何结果。当然,现代处理器并不慢,而且 C 非常快,比 Python 快得多,Python 本身可以非常快速地检查素数。
在我看来,我做了一些愚蠢的事情,让代码未优化或臃肿。请看看并告诉我哪里出错了:
int num,i,chk = 0 ;
printf("\nEnter positive integer to check : ");
scanf("%d", &num);
for (i = 2; i = num / 2; i++)
{
if (num%i == 0)
{
break;
chk = 1;
}
}
if(num == 1)
printf("\n\n1 is neither prime not composite.\n");
else if(chk == 1)
printf("\n\nThe number %d is indeed prime.\n", num);
else
("\n\nThe number %d is not actually prime.\n", num);
【问题讨论】:
-
您是否考虑过在调试器中进行跟踪以查看发生了什么?
num永远不会改变,所以考虑一下如果 break 永远不会被击中,你的循环是如何工作的。也许您打算在比较中使用<? -
@RetiredNinja 对不起,我没听懂你...为什么 num 改变很重要...我应该改变来测试 num%i ,对吧?
-
i = num / 2作为您的循环条件是否适合您? -
以后,当询问不工作的代码时,请始终提供minimal reproducible example。不要只提供代码片段。
-
break之后的语句不会被执行。
标签: c visual-studio for-loop primes