求解||打印出从1-n的所有素数?c语言?

求解||打印出从1-n的所有素数?c语言?

问题描述:

原题是这样的

1)输入正整数n;

    2)判断1-n之间有多少个素数,并输出所有素数。

    3)每行输出10个素数,每个素数输出格式使用“%-5d”(宽度5位,数据左对齐);

    4)最后打印该区间共有多少个素数(“%d”)。

下面是我写的代码,请问哪里出问题了/?

#include<stdio.h>
#include<math.h>
int main ( )
{
    int a,n,i,k,m=0;
    scanf("%d",&a);
     for(n=1;n<=a;n+=2)
     {
         k=sqrt(n);
         for(i=2;i<=k;i++)
             if(n%i==0)break;
         if(i>=k+1)
         {
             printf("%-5d",n);
             m=m+1;
         }
         if(m%10==0)printf("\n");
     }
     printf("\n");
     printf("The total is %-5d\n",m);
     return 0;
}

#include <stdio.h>

int main ( )
{
    int x,n,i=2,j,m=0;
    scanf("%d",&n);
    if(n<=1){ //1不是素数,也不是合数
        printf("The total is %-5d\n",m);
        return 0;
    }
    for(int i=2;i<=n;i++){
        x = i;
        //1、x是2(2是素数),x/2等于1,不会进入for循环,同时满足j*1.0>x*1.0/2
        //2、x是大于2的偶数(大于2的偶数都不是素数),必有x%2 == 0,j是2,不满足j*1.0>x*1.0/2
        //3、x是大于2的奇数,x/2必然是小数,如果x%j == 0,则j*1.0<x*1.0/2,不满足j*1.0>x*1.0/2;
        //如果x%j == 0都不成立,由于j是整数,且j*1.0 < x*1.0/2,i++导致最后会j*1.0>x*1.0/2,此时是素数
        for (j = 2;j*1.0 < x*1.0/2;j++){
            if(x%j == 0){
                break;
            }
        }
        
        if(j*1.0>x*1.0/2){ //满足该条件的就是素数
            printf("%-5d",x);
            m++;
            if(m%10==0){
                printf("\n");
            }
        }
    }
    if(m%10!=0){
        printf("\n");
    }
    
    printf("The total is %-5d\n",m);
    
    return 0;
}

1不是素数,也不是合数