“只愿君心似我心,定不负相思意”——李之仪
小 W 将要去和小 K 约会啦!
但聪(ao)明(jiao)的小 K 并不想让小 W 那么容易知道他们的约会地点。于是小 W 收到了一条信息:“给定两个数的和 nn, 请你求出这两个数的最小公倍数的可能值的最大值,作为交换,如果你给出了正确答案,我将会把你和小 K 的约会地点告诉你。”
众所周知,小 W 是个数学弱渣,他只好求助数学巨佬小 H,但小 H 并不屑于做这种简单题,于是帮助小 W 的任务就交给你啦!
Input
输入文件的第一行一个整数 TT 表示数据组数。
接下来 TT 行每行一个整数 nn ,表示给定的两个数的和 nn,数据保证nn>0。
Output
共TT 行,每行一个整数表示和为 nn 的两个数的最小公倍数的可能值的最大值。
Samples
Hint
- 30%的数据满足 T≤10T≤10, 1<n≤10001<n≤1000
- 100% 的数据满足 T≤10000T≤10000 ,1<n≤1091<n≤109
Source
石光中学 2018年 泉州复赛模拟 提高组 day1
若n为奇数,则a和b相差 1 最优
若n为偶数,令m = n/2,若m - 1和m + 1均为奇数,则a = m - 1, b = m + 1
否则a = m - 2, b = m + 2
特别的,n为2时,输出1
#pragma GCC optimize(2) #include<bits/stdc++.h> #define x first #define y second using namespace std; typedef long long ll; int read(){ int x=0; int f=1; char ch=getchar(); while(ch<'0'||ch>'9') {if(ch=='-') f=-1; ch=getchar();} while(ch>='0'&&ch<='9') {x=x*10+ch-'0'; ch=getchar();} return x*f; } const int maxn=2e6+100; /* 若n为奇数,则a和b相差 1 最优 若n为偶数,令m = n/2,若m - 1和m + 1均为奇数,则a = m - 1, b = m + 1 否则a = m - 2, b = m + 2 特别的,n为2时,输出1 */ int main(){ int t; cin>>t; while(t--){ ll n; cin>>n; if(n==2){ cout<<1<<endl; } else if(n&1){ ll p=n/2; ll p1=p+1; ll ans=p*p1/__gcd(p,p1); cout<<ans<<endl; } else{ ll p=n/2; ll p1,p2,ans; if(p%2==0){ p1=p-1; p2=p+1; } else{ p1=p-2; p2=p+2; } ans=p1/__gcd(p1,p2)*p2; cout<<ans<<endl; } } }