#include<stdio.h>
int main()
{
int i,j
int count=0
for(i=2i<100i++)
{
for(j=2j<=i/2j++)
if(i%j==0)//如果i能被j整除 就不是质数 退出循环
break
if(j>i/2)
{
count++
printf("%-3d",i)
if(count%5==0)//当每一行有5个数时 换行
printf("\n")
}
}
return 0
}
for(j=2j<=i/2j++)中的 j<=i/2是表示 从j=2开始遍历到j=i/2 看看2~i/2中能否整除i
如果都不能 说明i是质数(也就是j>i/2)
如果有1个及以上能整除i 说明i不是质数
for()
{
}
//for循环结束之后 j的值是大于i/2的 因为for循环的条件是:j<=i/2
//因此 当j>i/2时 for循环结束
if(j>i/2)
这里当且仅当2~i/2都不能整除i时 也就是j>i/2 才说明i是质数
参考资料
输出100以内的质数,用c语言如何编写?.百度知道[引用时间2017-12-25]
代码如下:/*
* 输出 1~20 之间的质数
*/
#include <stdio.h>
#include <math.h>
//判断一整数是否为质数
int isprime(int n)
{
int i
int up
int ret = 1
up = sqrt(n)
for (i=2i<=upi++) {
if (n%i==0) {
ret = 0
break
}
}
return ret
}
//主函数
int main()
{
int n
printf("1~20 之间的质数有:")
for (n=2n<20n++) {
if (isprime(n))
printf("%d ", n)
}
printf("\n")
return 0
}
运行程序,输出如下:
1~20 之间的质数有:2 3 5 7 11 13 17 19
#include <stdio.h>static char m[8000000]
static int prime[500000]
#define MAX_N 7368787
void set(void)
{
int i,j
for(i = 2 i<=MAX_N i++)
{
if(m[i] == 1) continue
for(j=i+i j<=MAX_N j+=i)
m[j]=1
}
for(i = j=0 i<=MAX_Ni++)
if(m[i]==0) prime[j++]=i
}
int main()
{
int m,n,
while(~scanf("%d%d",&m,&n))
{
for(i=mi<=ni++)
{
printf("%d",prime[i-1])
if(i==n || (i-m)%10==9) putchar('\n')
else putchar(' ')
}
}
return 0
}