为么结果总是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;
}

按博主所写,确实输入什么数都是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;
}

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

在第十行前面加flag=1

每次循环前将flag重置为1

修改如下

//本题要求输出2到n之间的全部素数,每行输出10个。素数就是只能被1和自身整除的正整数。注意:1不是素数,2是素数。
#include<stdio.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*i<=j; i++)
        {
            if(j%i==0)
                flag=0;

        }
        if(flag==1)
            printf("%d ",j);
    }
    return 0;
}



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