分值: 11
一天蒜头君猜想,是不是所有的偶数(除了 2),都可以用两个质数相加得到呢?于是聪明的蒜头君就找你来验证了。
输入格式
第一行输入一个整数 t 表示测试组数。
接下来 t 行,每行一个整数 n。
输出格式
输出两个整数,因为答案可能有多个,所有要求输出的这两个整数是所有答案中字典序最小的。
数据范围
对于 30% 的数据 1≤t≤10^3。
对于 60% 的数据 1≤t≤10^5。
对于 100% 的数据 1≤t≤106,4≤n≤106,n 为偶数。
样例输入
3
4
8
20
样例输出
2 2
3 5
3 17
#include<bits/stdc++.h>
using namespace std;
bool vis[1000010];
int main()
{
int n,m,j=0,k,i,T;
memset(vis,true,sizeof(vis));//埃氏筛法——初始化都是素数
for(i=2;i<=1000000;i++)//0和1不是素数,从2开始
{
if(vis[i]==true)//如果i是素数,让i的所有倍数都不是素数
{
for(j=i+i;j<=1000000;j+=i)
vis[j]=false;//把所有质数的倍数标记
}
}
scanf("%d",&T);
while(T--)
{
scanf("%d",&n);
for(i=2;;i++)
{
if(vis[i]==true&&vis[n-i]==true)
{
printf("%d %d\n",i,n-i);
break;
}
}
}
return 0;
}