C语言一道题:编写一个输出1000以内素数的程序,每行输出6个,最后一行小于等于6个。

每行输出6个后要换行,必须设置一个计数器,统计输出个数,大于6换行。然后重新将计数器归零。
#include<stdio.h>
#include<math.h>
#include<stdlib.h>
main()
{
int i,m,n,j=1,a[200]={2};
for(i=2;i<1000;i++)
{
n=(int)sqrt(i);
for(m=2; m<=n; m++)
{
if (i/n==0)
{
a[j]=i;
j++;
printf("%5d",a[i]);
if(j%6==0)puts("\n");
}
}
}
system("pause");
return 0;
}
哪里错了QWQ。。。或者正确的应该怎么写

#include <stdio.h>
#include <math.h>
int main()
{
    int temp; //用于存储当前数的二次根
    int total=0; //用于存储已输出的素数个数
    int nextLine=0; //用于判断是否需要输出一个换行
    for(int i=2;i<=1000;++i) //对1000以内的数进行遍历
    {
        //得到当前数i的二次根值
        temp=(int)(sqrt(i));
        
        //遍历j到temp内的所有数,判断能否整除i,如果能则说明i不是素数
        for(int j=2;j<=temp;++j)
        {
            //如果存在j<=temp能整除i的,则说明i不是素数,跳出内循环
            if(i%j==0)
            {
                break;
            }
            //如果j==temp依然没有跳出循环,说明i是素数,输出i并增加total          
              //和nextLine,然后判断nextLine是否能被6整除,如果能则输出\n
            else if(j==temp)
            {
                ++total;
                ++nextLine;
                printf("%5d",i);
                if(nextLine%6==0)
                    printf("\n");
            }
        }
    }
    //最后输出素数总个数
    printf("Total is %d\n",total);
    
    return 0;
}

你的程序挺乱的,我不明白你为什么没定义main函数的返回值类型,也不知道你那个a[200]的作用是什么。

另外

a[j]=i;和printf("%5d",a[i]);我也没看懂是干嘛

追问

o(* ̄▽ ̄*)ブ谢谢你,我改过来了,但是为什么这个程序素数是从5开始的,之前的3没有显示

追答

没有输出3的原因是:
当i==3时,(temp=(int)(sqrt(i)))==1
因为temp==1了,所以for(int j=2;j<=temp;++j)的循环就直接“跳过”了,也就不会执行循环体内的程序
解决办法是将for(int j=2;……)改为for(int j=1;……),然后将循环体内的if(i%j==0)改为if(j!=1 && i%j==0)

更简单的办法是不利用平方根求素数的捷径,而是直接对小于i的所有整数进行判断。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2017-05-09
#include <stdafx.h>
#include <stdlib.h>
int main()
{
int i,j,n=0;
for(i=2;i<=1000;i++)
{
for(j=2;j<i;j++)
if(i%j==0) break;
if(j>=i) {printf("%-4d",i);n++;}
if(n%6==0)printf("\n");
}
system("pause");
return 0;
}

本回答被网友采纳
相似回答