alexhek
Babylanyon
采纳率55.6%
2020-11-29 20:20 阅读 52

求解||打印出从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;
}
  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享

2条回答 默认 最新

  • 已采纳
    qq_25376897 qq_25376897 2020-11-30 10:50
    #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 评论 复制链接分享
  • qq_25376897 qq_25376897 2020-11-30 10:30

    1不是素数,也不是合数

    点赞 评论 复制链接分享

相关推荐