//本题要求输出2到n之间的全部素数,每行输出10个。素数就是只能被1和自身整除的正整数。注意:1不是素数,2是素数。
#include<stdio.h>
int main()
{
long i,n,j=2;
int flag=1;
scanf("%ld",&n);
for(j=2;j<n;j++)
{
for(i=2;i<j;i++)
{
if(j%i==0)
flag=0;
if(flag==1)
printf("%d",j);
}
if(j==2)
printf("%d",j);
}
return 0;
}
按博主所写,确实输入什么数都是2和3。为什么?
改了一下:
#include<stdio.h>
#include<math.h>
int main()
{
int i,n,j=2;
int flag=1;
scanf("%d",&n);
for(j=2; j<n; j++)
{
flag=1;
for(i=2; i<=sqrt(j); i++)
{
if(j%i==0)
flag=0;
}
if(flag==1)
printf("%d ",j);
}
return 0;
}
运行结果如图:
下面另一个方法也可供题主参考:
//本题要求输出2到n之间的全部素数,每行输出10个。素数就是只能被1和自身整除的正整数。注意:1不是素数,2是素数。
#include<stdio.h>
#include<math.h>
//判断是否是素数
int isPrime(int a)
{
int j;
for (j = 2; j <= sqrt(a); j++){
if (a%j == 0)
return 1;
}
return 0;
}
int main()
{
int i,n,num=0;
//输入n
scanf("%d",&n);
for (i=2;i<=n;i++){
if(isPrime(i)==0){
printf("%5d", i);
num++;
if(num%10==0)
printf("\n");
}
}
if(num<10){
printf("\n");
}
return 0;
}
希望对题主有所帮助,望采纳!
在第十行前面加flag=1
每次循环前将flag重置为1
修改如下
//本题要求输出2到n之间的全部素数,每行输出10个。素数就是只能被1和自身整除的正整数。注意:1不是素数,2是素数。
#include<stdio.h>
int main()
{
int i,n,j=2;
int flag=1;
scanf("%d",&n);
for(j=2; j<n; j++)
{
flag=1;
for(i=2; i*i<=j; i++)
{
if(j%i==0)
flag=0;
}
if(flag==1)
printf("%d ",j);
}
return 0;
}
#include<stdio.h>
int main()
{
long i,n,j=2;
int flag=1,p=0;
scanf("%ld",&n);
for(j=2;j<=n;j++)
{
flag=1;
for(i=2;i<j;i++)
{
if(j%i==0)
flag=0;
}
if(flag==1)
{
printf("%d ", j);
p++;
}
if(p%10==0) printf("\n");
}
return 0;
}