题目背景
哥德巴赫猜想是世界近代三大数学难题之一。至今还未被成功证明。
题目描述
虽然哥德巴赫猜想尚未被成功证明,但是这个猜想目前在计算机处理能力范围内是成立的。
哥德巴赫猜想可以描述为:任意一个大于2的偶数都可以写成两个质数之和。
因此,你也来设计一个程序,将给定的大于2的偶数拆分成两个质数之和。(有多种拆分方案时,输出较小的加数相比其他拆分方法最小的方案)
输入格式
第一行一个整数
接下来的行,每行一个偶数
输出格式
行,每行对应一次询问的答案
样例数据
样例输入1
5
4
6
888
890
892
样例输出1
2 2
3 3
5 883
3 887
5 887
数据范围
对于100%的数据,
解析
先写一个判断质数的函数:
bool is_ss(long long a) {
for(long long i=2; i*i<=a; i++)
if(a%i==0) return false;
return true;
}
然后每组数据枚举出答案即可,完整代码如下:
#include <iostream>
using namespace std;
long long top=0, a, s[100005];
bool is_ss(long long a) {
for(long long i=2; i*i<=a; i++) {
if(a%i==0) {
return false;
}
}
return true;
}
int main() {
long long q;
cin>>q;
while(q--) {
cin>>a;
top=0;
for(long long i=2;i<=a/2; i++) {
long long j=a-i;
if(is_ss(i)&&is_ss(j)) {
cout<<i<<" "<<j<<endl;
break;
}
}
}
return 0;
}