abc112D 和为定值时的最大公约数
题面:给定正整数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;
}