牛客多校 G-max

题目描述
给定两个正整数 c,n,求一个数对 (a,b),满足 1<=a,b<=n,且 gcd(a,b)=c
要求输出最大的 ab
1<=c,n<=10^9

思路:首先 如果 c> n 那么无解

其次  a 和 b 一定都是 c 的倍数,如果 c>n/2,那么选 a=b=c 最优
否则  选 a=(n/c)*c , b=((n/c)-1)c

#include<cstdio>
using namespace std;
int main()
{
    int c,n;
    scanf("%d%d",&c,&n);
    if(c>n) printf("-1\n");
    else if(c>n/2) printf("%lld\n",(long long)c*c);
    else{
        int a = (n/c)*c;
        int b = (n/c-1)*c;
        printf("%lld\n",(long long)a*b);
    }
    return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_41156122/article/details/81369410