传送门:http://acm.jlu.edu.cn/joj/showproblem.php?pid=2573
一道求素数的题,因为范围只有20000,可以先把20000以内的符合的预处理出来,预处理加点小技巧,详细见代码。
代码:
#include <cstdio>
#include <cstring>
using namespace std;
int prime[20000];
int ans[20000];
int main()
{
memset(prime, 0, sizeof(prime));
for (int i = 2; i < 200; ++i) //因为是20000以内的,所以处理到200就够了。
for (int j = i; j * i <= 20000; ++j) //按上限枚举
prime[i * j] = 1;
for (int i = 2; i < 200; ++i)
for (int j = i; j * i <= 20000; ++j)
if (!prime[i] && !prime[j])
ans[i * j] = 1;
for (int i = 10000; i < 20000; ++i)
if (ans[i])
printf("%d\n", i);
return 0;
}