hdu 4627 The Unsolvable Problem (数论)

来源:互联网 发布:人工智能 经济学 论文 编辑:程序博客网 时间:2024/05/16 01:39

题意:

给你一个n(2<=n<= 109),让你寻找满这样的a和b:n=a+b且lcm(a,b)最大。输出最大的lcm(a,b)。

 

思路:

由最小公倍数最大可知,a和b应尽量接近。

当n=2*k+1时,易知a=k,b=k+1,因相邻的两个整数必定互质,它们的最小公倍数肯定最大

当n=2*k时,显然不能让a=k,b=k,此时最小公倍数就是k了。若k为偶数,令a=k-1,b=k+1,因相邻的奇数互质。若k为奇数,令a=k-2,b=k+2。

注意n=2的情况要特殊处理一下

 

#include<iostream>using namespace std;inline long long gcd(long long a, long long b){    return b?gcd(b,a%b):a;}inline long long lcm(long long a, long long b){    return a*b/gcd(a,b);}int main(){    long long T,n,k,ans;    cin>>T;    while(T--)    {        cin>>n;        if(n==2)        {            cout<<1<<endl;            continue;        }        k=n/2;        if(n==2*k)        {            if(k%2==1)            {                ans=lcm(k-2,k+2);            }            else if(k%2==0)            {                ans=lcm(k-1,k+1);            }        }        else if(n==2*k+1)        {            ans=lcm(k,k+1);        }        cout<<ans<<endl;    }    return 0;}


 

 

原创粉丝点击