10.28T2 打表
#3865 A+B 问题
描述
连续几次考试太难了,都要求出一道简单题。老师想,最简单的题肯定是a+b 啊,但当老师出完数据后发现输入数据.in没了,只有输出答案数据.out了。咋办呢,就把输出当输入,改一下题吧。请输出使得和为n的两个数a,b 的最小公倍数尽可能大的数值。
输入
输入文件的第一行一个整数T 表示数据组数。
接下来T行每行一个整数n ,表示.out中的数值,即a+b=n 。
输出
共T行,每行一个整数表示最大的最小公倍数的值
提示
【数据范围】
30%的数据满足 T<=10,n<=1000
100% 的数据满足T<=10000 ,n<=10^9
打表发现一定两个数字是互质的
所以我们要找相邻最近的一对互质数
发现对于奇数直接拆成n/2和n/2+1两个数字
如果能被4整除显然是
n/2+1和n/2-1
如果只是2倍数非4倍数的话就是n/2-2和n/2+2
乘上去就可以了
code:
1 #include<iostream> 2 #include<cstdio> 3 using namespace std; 4 signed main(){ 5 long long T; 6 cin>>T; 7 while(T--){ 8 long long n; 9 cin>>n; 10 if(n==2)cout<<1<<'\n'; 11 else if(n==1)cout<<0<<'\n'; 12 else if(n%2==1)cout<<(n/2)*(n/2+1)<<'\n'; 13 else if(n%4==0)cout<<(n/2-1)*(n/2+1)<<'\n'; 14 else cout<<(n/2-2)*(n/2+2)<<'\n'; 15 } 16 }
over