B - Primes
方法一
筛一次素数,然后遍历即可
#include <iostream>
using namespace std;
const int N = 1e7 + 10;
bool st[N];
int p[N], cnt;
void get()
{
st[1] = 1;
for (int i = 2; i <= N; i++) {
if (!st[i])
p[++cnt] = i;
for (int j = 1; p[j] <= N / i; j++) {
st[p[j] * i] = 1;
if (i % p[j] == 0)
break;
}
}
}
int main()
{
int a;
cin >> a;
get();
for (int i = 1; i < a; i++) {
if (!st[a - i] && !st[i]) {
cout << i << ' ' << a - i;
return 0;
}
}
cout << -1 << endl;
return 0;
}
方法二
因为输入的数是素数,素数除了2之外全是奇数,所以我们可以直接判断n-2是否是素数即可
#include <iostream>
using namespace std;
bool check(int n)
{
if (n <= 1)
return 0;
for (int i = 2; i <= n / i; i++)
if (n % i == 0)
return 0;
return 1;
}
int main()
{
int a;
cin >> a;
if (check(a - 2))
cout << 2 << ' ' << a - 2;
else
cout << -1;
return 0;
}