输出所有在10000 - 20000之间,恰好可以分解为两个素数乘积的整数。将这些数从小到大输出。
#include<stdio.h>
#include<math.h>
#include<string.h>
#define N 20000
int
main()
{
int
a[N];
memset
(a,1,
sizeof
(a));
int
i,j;
for
(i=2;i<
sqrt
(N);i++)//素数筛选20000内
if
(a[i])
for
(j=i*i;j<N;j+=i)
a[j]=0;
for
(i=10000;i<20000;i++)
for
(j=2;j<=
sqrt
(i);j++)//注意j是小于等于sqrt(i),否则会有数据缺失,因为可能有些合数是有两个相同的质数乘积
if
(a[j]&&i%j==0&&a[i/j])//直接判断分解的两个数是否是质数
printf
(
"%d\n"
,i);//直接输出
return
0;
}