C语言:输出素数

输出300-500之间的素数,并没输出五个素数换行。
以下代码生成的程序换行的时候有问题。(如上图所示)
?#include <stdio.h>
#include <math.h>
int isprime(int n);
int main(void)
{
int n=300;
isprime(n);
return 0;
}
int isprime(int n)
{
int i,k,m=0;
for (n=301;n<=500;n+=2)
{
k=sqrt(n*1.0);
for (i=2;i<=k;i++)
if (n%i==0)
break;
if (i>=k+1)
{
printf("%4d",n);
m=m+1;
}
if (m%5==0)
{
printf("\n");
}
}
printf("\n");
return 0;
}

if (i>=k+1)
{
printf("%4d",n);
m=m+1;
}
if (m%5==0)
{
printf("\n");
}
这一段
应该改成
if (i>=k+1)
{
printf("%4d",n);
m=m+1;
if (m%5==0)
{
printf("\n");
}
}

因为你的m只有在遇到素数时才应该判断是否要换行,下面的判断语句如果放在if外面,就会导致在遇到一些非素数时依然去输出换行
温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2017-09-26
#include <stdio.h>
#include <conio.h>
sushu(int a)
{
int i1=2,b;
b=1;
for(;i1<a;i1++)
{
if(a%i1==0)
b=0;
}
return(b);
}
main()
{
int n=0,i,panduan;
printf("以下是300~500以内的所有素数:\n");
for(i=300;i<=500;i++)
{
panduan=sushu(i);
if (panduan==1)
{
n++;
printf("%d,",i);
if(n>4)
{
printf("\n");
n=0;
}
}
}
printf("\n");
}
第2个回答  推荐于2017-10-01
#include <stdio.h>
#include <math.h>
int isprime(int n);
int main(void){
int n=300;
isprime(n);
return 0;}
int isprime(int n){
int i,k,m=0;
for (n=301;n<=500;n+=2){
k=sqrt(n*1.0);
for (i=2;i<=k;i++)
if (n%i==0)break;
if (i>=k+1){
printf("%4d",n);
m=m+1;
if (m%5==0)
printf("\n");}}
printf("\n");
return 0;}本回答被提问者采纳
第3个回答  2012-12-16
求完整代码
第4个回答  2012-12-16
if (i>=k+1)
{
printf("%4d",n);
m=m+1;
if (m%5==0)
{
printf("\n");
}
}
这样