1070: Welcome to HPU Online Judge! [水题]
时间限制: 1 Sec 内存限制: 128 MB Special Judge提交: 157 解决: 43 统计
题目描述
Today, CZY gives you a positive integer N, now he wants to find two different prime numbers a and b for N = a + b.
输入
The first line contains only one integer T, which indicates the number of test cases.
For each test case contains a positive integer N.
Data range:1 <= T <= 100, 1 <= N <= 1000.
输出
For each test case, if the answer doesn't exist then print "-1"(without quotes).
Otherwise, you can output a b in any order, but must be separated with a space.
If there are multiple solutions, print any of them.
样例输入
2
5
6
样例输出
2 3
-1
解析:
把一个整数拆分成两个不同素数的和,如果有多组解,输出任意一个(第一组数据输出3 2也正确),无解输出-1
程序如下:
#include<cstdio> int Prime(int n) { int flag=0; for(int i=2; i*i<=n; i++) { if(n%i==0) { flag=1; break; } } if(flag==1||n==1) return 0; return 1; } int main() { int T; scanf("%d",&T); while(T--) { int n; int flag=0; scanf("%d",&n); int a,b; for(int i=2; i<n; i++) for(int j=i+1; j<n; j++) { if(i+j==n&&Prime(i)&&Prime(j)) { flag=1; a=i; b=j; break; } } if(flag==0) printf("-1\n"); else printf("%d %d\n",a,b); } return 0; }
ps:如果要求输出所有的结果,可以参考下面的代码
#include<cstdio> int Prime(int n) { int flag=0; for(int i=2; i*i<=n; i++) { if(n%i==0) { flag=1; break; } } if(flag==1||n==1) return 0; return 1; } int main() { int T; scanf("%d",&T); while(T--) { int n; int flag=0; scanf("%d",&n); for(int i=2; i<n; i++) for(int j=i+1; j<n; j++) { if(i+j==n&&Prime(i)&&Prime(j)) { flag=1; printf("%d %d\n",i,j); break; } } if(flag==0) printf("-1\n"); } return 0; }