HDU-1262-寻找素数对
这道题是欧拉筛,什么筛都行,只要求得出素数就行。(埃筛也行)
中文题目我就不解释拉~
vis[]表示素数:vis[i] = 1表示i为素数。
这道题我用的欧拉筛。
首先就是预处理init()出素数。
然后输入的m是一个偶数,要求我们得到差值最小的两个质数,和为m。
我们就从m / 2开始,往前走或者往后走都行~
第一次遇到的就可以直接输出break啦~
代码部分:
#include <bits/stdc++.h>
using namespace std;
const int N = 1e4 + 10;
int vis[N];
int m;
void init()
{
for (int i = 2; i < N; i++)
{
if (!vis[i])
{
for (int j = 2; i * j < N; j++)
{
vis[i * j] = 1;
}
}
}
}
int main()
{
init();
while (~scanf ("%d", &m))
{
int t1 = m / 2;
while (t1 > 0)
{
int t2 = m - t1;
if (!vis[t1] && !vis[t2])
{
cout << t1 << " " << t2 << endl;
break;
}
t1--;
}
}
return 0;
}