链接:https://www.nowcoder.com/acm/contest/143/G
来源:牛客网
时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 262144K,其他语言524288K
64bit IO Format: %lld
题目描述
Give two positive integer c, n. You need to find a pair of integer (a,b) satisfy 1<=a,b<=n and the greatest common division of a and b is c.And you need to maximize the product of a and b
输入描述:
The first line has two positive integer c,n
输出描述:
Output the maximum product of a and b. If there are no such a and b, just output -1
示例1
输入
复制
2 4
输出
复制
8
说明
a=2,b=4
备注:
1<=c,n<=10^9
题目描述
给定两个正整数 c,n,求一个数对 (a,b),满足 1<=a,b<=n,且 gcd(a,b)=c
要求输出最大的 ab,不存在则输出-1
1<=c,n<=10^9
解题思路
首先 a 和 b 一定都是 c 的倍数,如果 n<2c,那么选 a=b=c 最优
否则选 a=(n/c)*c , b=((n/c)-1)c
思路:转化为a'=a/c,,b'=b/c,a'*b'最大且a' b'互质
相邻的两个数互质!则a=a'*c,,b=b'*c,,a与b的最大公约数为c
需要注意a==b的情况和输出-1的情况
总结:相邻的两个数互质!a' b'互质,则a=a'*c,,b=b'*c,,a与b的最大公约数为c
//牛客第五次多校G题
#include<bits/stdc++.h>
using namespace std;
int main() {
int c, n;
while (cin >> c >> n) {
int a, b;
if (c > n)cout << "-1" << endl;
else if (n < 2 * c)cout << 1LL * c * c << endl;
else {
b = (int)(n / c)*c;
a = b - c;
cout << 1LL * a * b << endl;
}
}
}