【问题标题】:Printing Out Prime Numbers in C在 C 中打印素数
【发布时间】:2014-01-15 21:47:42
【问题描述】:

我正在尝试打印出从用户那里获得的特定值的素数。如果我只收到 1 的答案,我想我的 for 循环有问题吗?

#include <stdio.h>
#include <cs50.h>

int main (void)
{
    printf("Length: ");
    int length = GetInt();

    bool notPrime = false;

    for (int i = 1; i < length; i++)
    {
        for (int k = 1; k <= i/2; k++)
        {
            if (i % k == 0)
            {
                notPrime = true;
                break;
            }
            else
            { 
                notPrime = false;
            }   
        }
        if (notPrime == false)
        {
            printf("%d ", i);
        }
    }
    printf("\n");
}

【问题讨论】:

  • 这对于至少前几个值的笔和纸调试应该不会太难。你试过吗?这告诉了你什么?
  • 能否请您澄清一下您的问题是什么?

标签: c for-loop numbers cs50


【解决方案1】:

在内部循环中:

for (int k = 1; k <= i/2; k++) 

您从k = 1 开始并测试k 是否除以i1 除任何整数,所以答案总是“非素数”,但事实并非如此(记住素数的定义)。从2开始:

for (int k = 2; k <= i/2; k++) 

【讨论】:

    【解决方案2】:

    在内部循环中:

    for(k=2; k<=sqrt(i); k++) 
    

    会起作用的。

    【讨论】:

      【解决方案3】:

      您可能需要检查特殊情况,您可以从 3 开始。 您也可以增加 2 排除对数:

      for(int i = 1; i < length; i++){
      
          if(number < 2) prime = true; 
          if(number == 2) prime = false;
          if(number % 2 == 0) prime = false; 
          for (int k = 3; k <= i/2; k++){
              if(number % i == 0 ){ 
                  prime = false;
                  break;
              }
          }
          if (prime){
              printf("%d ", i);
          }
      }
      

      你应该从第一个bucle中制作IF,你也可以改变k sqrt(i)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-05-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-11-27
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多