每行输出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。。。或者正确的应该怎么写
你的程序挺乱的,我不明白你为什么没定义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的所有整数进行判断。