abc112D 和为定值时的最大公约数

71 阅读1分钟

题面:给定正整数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>
void solve() {
    int n, m;
    std::cin >> n >> m;
    int ans = 0;
    for (int i = 1; i <= m/i; i++) if (m % i == 0) {
        if (i * n <= m) {
            ans = std::max(ans, i);
        }
        if (m / i * n <= m) {
            ans = std::max(ans, m / i);
        }
    }
    std::cout << ans << "\n";
}
int main() {
    std::cin.tie(0)->sync_with_stdio(0);
    int t = 1;
    while (t--) solve();
    return 0;
}

标签:数论