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;
}
但是,qzz说还有更简便的方法做,就是如果一个数减去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;
}
标签:cout,int,namespace,st,素数,Primes,check 来源: https://www.cnblogs.com/Flying-bullet/p/16479102.html