2018牛客多校5G max

给出两个正整数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,那么想要让a
b最大,就可以让他们分别去x与x-c
通过(n/c)*c可以快速算出小于n的情况下的c的最大倍数

#include <bits/stdc++.h>
#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();
}

おすすめ

転載: blog.csdn.net/fdxgcw/article/details/120618543