【问题标题】:Prime numbers between 1 to 100 in C Programming LanguageC编程语言中1到100之间的素数
【发布时间】:2017-05-17 14:42:28
【问题描述】:

我想打印 1 到 100 之间的质数,我编写如下代码,但是当我运行它时,它开始打印 3,7,11,17....91 为什么不打印代码 2? 请朋友们帮帮我

#include <stdio.h>
int main(void)
{
    for(int i=2;i<100;i++)
    {
        for(int j=2;j<i;j++)
        {
            if(i%j==0)
                break;
            else if(i==j+1)
                printf("%d\n",i);
        }
    }
}

【问题讨论】:

  • 因为2%2 == 0,你必须假设,'1 和 2' 是质数并继续在那里
  • 我应该如何以及在哪里修改我的代码?
  • 有很多选择,但我认为在循环之前使用printf("2\n") 就可以了......
  • 非常感谢!但我不想将 2 手册放入代码中,我希望代码自行打印 2
  • @DanielSanchez 事实上i=2 从未在if(i%j==0) 中测试过,因为对于第二个循环j=2;j&lt;i

标签: c loops for-loop


【解决方案1】:

i==j+1 的条件不适用于 i==2。这可以通过对内部循环进行一些更改来解决:

#include <stdio.h>
int main(void)
{
 for (int i=2; i<100; i++)
 {
  for (int j=2; j<=i; j++)   // Changed upper bound
  {
    if (i == j)  // Changed condition and reversed order of if:s
      printf("%d\n",i);
    else if (i%j == 0)
      break;
  }
 }
}

【讨论】:

  • 非常感谢...您解决了我的问题,但是请您解释一下您的代码,用代码编写 cmets,说明为什么我们使用第二个循环以及 if else 条件和 break 语句,我会非常感谢你
  • 您要我记录您的代码吗? (代码的结构是一样的,我只是修复了一个小错误。)StackOverflow 不是这样的。
  • 这只是一个请求...无论如何,非常感谢亲爱的
  • @user7369637 给非英语母语用户的建议:不要称呼别人“亲爱的”。
【解决方案2】:
#include <stdio.h>
#include <conio.h>
int main()
{
    int i,j;
    int b=0;
    for (i=2;i<=100;i++){
        for (j=2;j<=i;j++){
            if (i%j==0){
                break;
            }
        }
        if (i==j)
            print f("\n%d",j);
    }
    getch ();
}

【讨论】:

    【解决方案3】:
    #include<stdio.h>
    main()
    {
        int i,j,k;
        for(i=2;i<=100;i++)
        {
            k=0;
            for(j=2;j<=i;j++)
            {
                if(i%j==0)
                k++;
            }
            if(k==1)
            printf("%d\t",i);
        }
    }
    

    【讨论】:

      【解决方案4】:
      #include <stdio.h>
      
      int main () {
      
         int i, j;
      
         for(i = 2; i<100; i++) {
      
            for(j = 2; j <= (i/j); j++) 
            if(!(i%j)) break; // if factor found, not prime
            if(j > (i/j)) printf("%d is prime", i);
         }
      
         return 0;
      }
      

      【讨论】:

        【解决方案5】:
        #include<stdio.h>
        int main()
        {
            int a,b,i,c,j;
            printf("\n Enter the two no. in between you want to check:");
            scanf("%d%d",&a,&c);
            printf("%d-%d\n",a,c);
            for(j=a;j<=c;j++)
            {
                b=0;
                for(i=1;i<=c;i++)
                {
                    if(j%i==0)
                    {
                         b++;
                    }
                }
                if(b==2)
                {
                    printf("\nPrime number:%d\n",j);
                }
                else
                {
                    printf("\n\tNot prime:%d\n",j);
                }
            }
        }
        

        【讨论】:

          猜你喜欢
          • 2018-12-09
          • 2017-10-03
          • 1970-01-01
          • 1970-01-01
          • 2010-11-29
          • 2013-10-25
          • 2019-01-20
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多