最大的最小公倍数

题目链接: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 }

     

原文地址:https://www.cnblogs.com/q-c-y/p/4655119.html