hpuoj【1070】Welcome to HPU Online Judge!【素數拆分】
阿新 • • 發佈:2019-01-08
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; }