标签:
题目链接:http://acm.hust.edu.cn/vjudge/problem/visitOriginUrl.action?id=45783
题意:
输入一个数n,而a+b=n,[a,b]表示为a,b的最小公倍数,而需要输出的是所有a,b最小公倍数中最大的数。
案例:
input
3
2
3
4
output
1
2
3
题目分析:
两个相近的奇数一定没有公约数,所以找最小公倍数中最大的数,要找离某数的二分之一最近的两个没有公约数的数。
当n为奇数时,两个数为n/2,n/2+1;
当n为偶数时,又分为两种情况:
当n/2为奇数时,两个数为n/2+2,n/2-2;
当n/2为偶数时,两个数为n/2+1,n/2-1;
但是,还需注意当n==2时,用上述方法得到负数,所以当n==2时,输出"1",当n!=2时,再用上述方法。
源代码如下:
1 #include<iostream> 2 using namespace std; 3 int main() 4 { 5 int T; 6 cin>>T; 7 for(int i=0;i<T;i++) 8 { 9 long long n; //n必须为long long 型 10 cin>>n; 11 if(n==2)cout<<"1"<<endl; 12 else if(n%2==0) 13 { 14 if(n/2%2==0) 15 cout<<(n/2-1)*(n/2+1)<<endl; 16 else 17 cout<<(n/2+2)*(n/2-2)<<endl; 18 } 19 else 20 cout<<n/2*(n/2+1)<<endl; 21 } 22 return 0; 23 }
标签:
原文地址:http://www.cnblogs.com/q-c-y/p/4655119.html