C语言如何列出小于50的素数?

来源:百度知道 编辑:UC知道 时间:2024/06/23 23:50:51
#include <stdio.h>

main()
{ int a[20],b[20];
int i,j,k=0;
for(i=1;i<=20;i++)
a[i-1]=2*i+1;
for(i=0;i<20;i++)
{for(j=3;(a[i]%j)!=0;j++)
if(j==a[i])
k=k+1;
b[k]=a[i];

}
printf("array A is:\n");
for(i=0;i<20;i++)
printf("%3d",a[i]);
printf("\n");
printf("array B is:\n");
for(i=1;i<=k;i++)
printf("%3d",b[i]);
printf("\n");
}

中间部分把找出的素数放入B数组中的FOR 循环好象不起作用,帮忙看看出了什么问题,谢谢.

for(i=0;i<20;i++)
{for(j=3;(a[i]%j)!=0;j++);/*这句后面要加个分号就OK了*/
if(j==a[i])
{/*if语句下面要加花括号*/
k=k+1;
b[k]=a[i];
}/*if*/
}
for(j=3;(a[i]%j)!=0;j++)
原因:如果不加分号,for循环语句是和下面的if语句是一体的,并没有达到原来的目的。
为了更直观,建议for(j=3;(a[i]%j)!=0;j++);改成:
for (j=3;j<=a[i];j++)
{
if (a[i]%j==0)
break;
}

就一点小问题,已改如下。
另,最后输出的时候没有输出2,可以把b[0]赋值2
for(i=0;i<20;i++)
{
for(j=3;(a[i]%j)!=0;j++);

if(j==a[i])
{
k=k+1;
b[k]=a[i];
}

}

#include<stdio.h>
int IsPrime(int n)
{
int flag=0,i;
if(n<=1)
flag=0;
if(n==2)
flag=1;
if(n>2)
{
for(i=2;i<n;i++)
if(n%i==0)
break;
if(i==n)
flag=1;

}

return flag;
}

void main()
{
int arr[20],i,count=0,num=2;
for(i=0;i<20