题目大意:给出一个整数x,要求将x分成n份,使得所有份的最大公因数最大,求这个最大的最大公因数
1<=x<=1e8;1<=n<=x
思路:我们设n个数的公因数是y,那么这n个数都应该是y的倍数,也就是y*n应该<=x且x-(y*n)能整除y,所以这n个数的和x也应该是y的倍数,那么我们只要遍历x的因数,找到x/y>=n的最大的因数即可。
//#include<__msvc_all_public_headers.hpp>
#include<bits/stdc++.h>
using namespace std;
const int N = 2e5 + 5;
typedef long long ll;
ll n;
int a[N];
void init()
{
}
void solve()
{
cin >> n;
init();
int k;
cin >> k;
vector<int>fac;
for (int i = 1; i*i <= n; i++)
{//分解因数
if (n % i == 0)
{
fac.push_back(i);
if (n / i != i)
{
fac.push_back(n / i);
}
}
}
sort(fac.begin(), fac.end());
for (int i = fac.size() - 1; i >= 0; i--)
{//从大到小遍历所有因数
if (n / fac[i] >= k)
{
cout << fac[i] << '\n';
return;
}
}
cout << '\n';
}
int main()
{
ios::sync_with_stdio(false);
cin.tie(0);
int t;
cin >> t;
while (t--)
{
solve();
}
return 0;
}