问题分析:素数是指大于1且只能被它本身和1整除的数,根据定义可以从2开始对一个数取余数一直到它本身,若它有第三个整除数,则可以判定它不是素数。若使用这种方法,会浪费时间,我们可以判断2到这个数的算术平方根之间有没有它的整除数。现在程序不仅是要判定素数,还要打印1到k之间的素数。
程序源代码:
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
main()
{
int m,n,i,j,k;
printf("\t\t\t 素数判定小程序\n\n");
printf("请输入测试数据组数:\n");
scanf("%d",&n);
while(n--)
{
printf("请输入截止数:\n");
scanf("%d",&k);
printf("1到%d之间的素数为:\n\n",k);
for(j=2;j<=k;j++)
{
m=(int)sqrt(j);
for(i=2;i<=m;i++)
if(j%i==0)
break;
if(i>m)
printf("%d ",j);
}
printf("\n\n");
system("pause");
system("CLS");
printf("\t\t\t 素数判定小程序\n\n");
}
}
程序分析:程序中用了两个for循环,外循环的作用是确定要打印数的区间,内循环的作用是判定一个数是否是素数,然后打印。所以说内循环是关键,倘若j是素数,那么内循环中i的最终值一定是i+1,所以若i>m,那么j就一定是素数。