Omkar and Last Class of Math
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?
InputEach test contains multiple test cases. The first line contains the number of test casestt(1≤t≤101≤t≤10). Description of the test cases follows.
Each test case consists of a single integernn(2≤n≤1092≤n≤109).
For each test case, output two positive integersaaandbb, such thata+b=na+b=nandLCM(a,b)LCM(a,b)is the minimum possible.
Example input3 4 6 9output
2 2 3 3 3 6Note
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
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 }