题目
思路
质数筛的时间复杂度约为。
数据数目有4次方,那么搜索要在三次方内。
于是选择二分+单指针+hash
代码
#include <bits/stdc++.h>
using namespace std;
const int N = 1e6+10;
int primes[N], cnt;
bool st[N];
void get_primes(int n)
{
for(int i = 2; i <= n; i++)
{
if(!st[i]) primes[++cnt] = i;
for(int j = 1; primes[j] * i <= n; j++)
{
st[primes[j] * i] = true;
if(i % primes[j] == 0) break;
}
}
}
int main()
{
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
get_primes(N);
int x;
while(cin >> x, x)
{
int l = 2, r = cnt;
while(l < r)
{
int mid = (l + r) >> 1;
if(primes[mid] >= x-3) r = mid;
else l = mid + 1;
}
for(int i = l; l >= 2; l--)
{
if(!st[x - primes[l]] && (x - primes[l]) >= 3)
{
cout << x << " = "<< x - primes[l] << " + " << primes[l] << '\n';
break;
}
}
}
return 0;
}