qq_57628994 2022-01-09 11:31 采纳率: 90.9%
浏览 64
已结题

为么结果总是23,要怎样改才正确?

//本题要求输出2到n之间的全部素数,每行输出10个。素数就是只能被1和自身整除的正整数。注意:1不是素数,2是素数。
#include<stdio.h>
int main()
{
    long i,n,j=2;
    int flag=1;
    scanf("%ld",&n);
    for(j=2;j<n;j++)
    {
        for(i=2;i<j;i++)
        {
            if(j%i==0)
            flag=0;
            if(flag==1)
            printf("%d",j);
        }
        if(j==2)
        printf("%d",j);
    }
    return 0;
}
  • 写回答

5条回答 默认 最新

  • Code_流苏 优质创作者: C/C++技术领域 2022-01-09 11:55
    关注

    按博主所写,确实输入什么数都是2和3。为什么?

    img


    因为红框部分的判断是虽然有思路在,但是这样输出是不合理的。

    改了一下:

    
    #include<stdio.h>
    #include<math.h>
    
    int main()
    {
        int i,n,j=2;
        int flag=1;
        scanf("%d",&n);
        for(j=2; j<n; j++)
        {
            flag=1;
            for(i=2; i<=sqrt(j); i++)
            {
                if(j%i==0)
                    flag=0;
     
            }
            if(flag==1)
                printf("%d ",j);
        }
        return 0;
    }
    
    
    

    运行结果如图:

    img

    下面另一个方法也可供题主参考:

    //本题要求输出2到n之间的全部素数,每行输出10个。素数就是只能被1和自身整除的正整数。注意:1不是素数,2是素数。
    #include<stdio.h>
    #include<math.h>
    //判断是否是素数
    int isPrime(int a)
    {
        int j;
        for (j = 2; j <= sqrt(a); j++){
            if (a%j == 0)
                return 1;
            }
        return 0;
    }
    
    int main()
    {
        int i,n,num=0;
        //输入n
        scanf("%d",&n);
        
        for (i=2;i<=n;i++){
        if(isPrime(i)==0){
            printf("%5d", i);
            num++;    
            if(num%10==0)
                printf("\n");    
            }
        }    
        if(num<10){
          printf("\n");
        }
        return 0;
    }
    

    希望对题主有所帮助,望采纳!

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(4条)

报告相同问题?

问题事件

  • 系统已结题 1月17日
  • 已采纳回答 1月9日
  • 创建了问题 1月9日