1. 程式人生 > 實用技巧 >Omkar and Last Class of Math

Omkar and Last Class of Math

In Omkar's last class of math, he learned about the least common multiple, orLCMLCM.LCM(a,b)LCM(a,b)is the smallest positive integerxxwhich is divisible by bothaaandbb.

Omkar, having a laudably curious mind, immediately thought of a problem involving theLCMLCMoperation: given an integernn, find positive integersaaandbbsuch thata+b=na+b=nandLCM(a,b)LCM(a,b)is the minimum value possible.

Can you help Omkar solve his ludicrously challenging math problem?

Input

Each test contains multiple test cases. The first line contains the number of test casestt(1t101≤t≤10). Description of the test cases follows.

Each test case consists of a single integernn(2n1092≤n≤109).

Output

For each test case, output two positive integersaaandbb, such thata+b=na+b=nandLCM(a,b)LCM(a,b)is the minimum possible.

Example input
3
4
6
9
output
2 2
3 3
3 6
Note

For the first test case, the numbers we can choose are1,31,3or2,22,2.LCM(1,3)=3LCM(1,3)=3andLCM(2,2)=2LCM(2,2)=2, so we output

2222.

For the second test case, the numbers we can choose are1,51,5,2,42,4, or3,33,3.LCM(1,5)=5LCM(1,5)=5,LCM(2,4)=4LCM(2,4)=4, andLCM(3,3)=3LCM(3,3)=3, so we output3333.

For the third test case,LCM(3,6)=6LCM(3,6)=6. It can be shown that there are no other pairs of numbers which sum to99that have a lowerLCMLCM.

題目大意:

給你一個n,找到兩個a,b,使a+b=n,並且lcm(a,b)儘可能小。
 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 int t,x;
 4 bool prim(int x) {
 5     if(x==2)
 6         return true;
 7     if(x<=1)
 8         return false;
 9     for(int i=2; i*i<=x; i++)
10         if(x%i==0)
11             return false;
12     return true;
13 }
14 int gcd(int x) {
15     int ans=-1;
16     for(int i=2; i<x; i++)
17         if(x%i==0)
18         {
19             ans=i;
20             break;
21         }
22     ans=x/ans;
23     return ans;
24 }
25 int main() {
26     scanf("%d",&t);
27     while(t--) {
28         scanf("%d",&x);
29         if(x%2==0)
30             printf("%d %d\n",x/2,x/2);
31         else {
32             if(prim(x))
33                 cout<<1<<" "<<x-1<<endl;
34             else
35                 printf("%d %d\n",gcd(x),x-gcd(x));
36         }
37     }
38     return 0;
39 }