【问题标题】:Issues in for loop for finding Prime number in C, Visual Studio [closed]用于在 C、Visual Studio 中查找素数的 for 循环中的问题 [关闭]
【发布时间】: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


【解决方案1】:

i = num / 2num / 2 分配给i 并评估为“真”以继续for 循环。 (当n 大于 1 时)。你可能打算i <= num / 2

【讨论】:

  • 我现在遇到了一个新问题,无论数字是否为素数,程序实际上都不会打印。它检查号码,然后继续终止。为什么不打印适当的结果?我的 if 语句有问题吗?
  • 当我输入 1 时,它会打印 1 既不是素数也不是复合物...
  • 这段代码呢:if (num%i == 0){ break; chk = 1; } ?
  • @Lucas 怎么样?
  • 如果块内的语句顺序不是{chk = 1; break;}
猜你喜欢
  • 2020-01-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-26
  • 2021-08-03
相关资源
最近更新 更多