给出两个正整数c,n,你需要找到一对整数(a,b),满足1<=a,b<=n,并且a和b的最大公约数是c。你需要使a和b的积最大化。
首先判断解不存在的情况:如果c>n那么解就不存在
如果c==n很显然a,b就是n,答案是nn
设x是小于n的情况下的c的最大倍数,显然,x与x-c的最大公约数是c,那么想要让ab最大,就可以让他们分别去x与x-c
通过(n/c)*c可以快速算出小于n的情况下的c的最大倍数
#include#define int long long using namespace std; int c, n; void solve() { cin >> c >> n; n /= c; if (n > 1) cout << n*(n - 1)*c *c << endl; else if (n == 1) cout << c *c << endl; else cout << -1 << endl; } signed main() { ios::sync_with_stdio(false); cin.tie(0); cout.tie(0); solve(); }



