abc112D 和為定值時的最大公約數

chenfy27發表於2024-03-10

題面:給定正整數n和m,構造一個長度為n的正整數序列a[i],滿足a[i]之和為m。求gcd({a[i]})的最大值。
範圍:1<=n<=1E5; n<=m<=1E9

思路:設k為答案,由於k是a[i]的公約數,那麼k也能被m整除,因此列舉m的約數判斷是否可行。

#include <bits/stdc++.h>
using namespace std;
#define int long long
#define rep(i,a,b) for(int i=a; i<=b; i++)
#define per(i,a,b) for(int i=b; i>=a; i--)

int n, m, ans;
void solve() {
    cin >> n >> m;
    for (int i = 1; i <= m/i; i++) if (m % i == 0) {
        if (i * n <= m) {
            ans = max(ans, i);
        }
        if (m/i * n <= m) {
            ans = max(ans, m/i);
        }
    }
    cout << ans << "\n";
}

signed main() {
    cin.tie(0)->sync_with_stdio(0);
    int t = 1;
    while (t--) solve();
    return 0;
}

相關文章