1 #include<iostream>
2 #include<cstdio>
3 #include<cmath>
4
using
namespace std;
5
int f(
int n)
//
判断n为素数
6
{
7
int i;
8
for(i=
2;i<=sqrt(
1.0*n);i++)
9
if(n%i==
0)
return
0;
10
return
1;
11 }
12
int main()
13 {
14
int n,m,i,j;
15 scanf(
"
%d
",&m);
16
while(m--)
17 {
18 scanf(
"
%d
",&n);
19
if(n%
2==
0)
20 {
21
if(n==
2) printf(
"
2\n
");
22
else
if(n==
4) printf(
"
2 2\n
");
//
大于2的偶数可以为两个素数之和
23
else
24 {
25
for(i=
3;i<n;i=i+
2)
//
简化程序
26
if(f(i)&&f(n-i))
27 { printf(
"
%d %d\n
",i,n-i);
break;}
28 }
29 }
30
else
31 {
32
if(f(n)) printf(
"
%d\n
",n);
//
自身为素数
33
else
if(f(n-
2)) printf(
"
2 %d\n
",n-
2);
//
由两个素数之和组成
34
else
if(f(n-
4)) printf(
"
2 2 %d\n
",n-
4);
//
由三个素数之和组成
35
else
36 {
37
for(i=
3;i<n;i=i+
2)
//
简化程序
38
{
39
if(f(i))
40 {
41
for(j=
3;j<n;j=j+
2)
42
if(f(j)&&f(n-i-j))
43 { printf(
"
%d %d %d\n
",i,j,n-i-j);
break; }
44 }
45
break;
46 }
47 }
48 }
49 }
50
return
0;
51 }