问题:给出a,b,问在区间[1, b],找到一个a的最大的因子n,使a/n最小。
思路:暴力!!!
因为数据范围,就根本没敢往上面想。
因为因子总是成对出现,一个大于
n
\sqrt n
n,一个小于
n
\sqrt n
n,这样一来我们就可以只枚举到
n
\sqrt n
n就足够了。
代码
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int main() {
ll t, a, b, mi, idx;
scanf("%lld", &t);
while(t--) {
mi = 0, idx = 0;
scanf("%lld%lld", &a, &b);
if(a <= b) printf("1\n"); //如果b大与a,最大因子就是a了。
else {
for(ll i=1; i<sqrt(a)+1; i++) {
if(a % i == 0) {//找到一个最大的因子。
if(a/i <= b) mi = max(mi, a/i);
if(i <= b) mi = max(mi, i);
}
}
printf("%lld\n", a/mi);//求答案。
}
}
return 0;
}
找一个数x的因子不用枚举到x,只需要到 x \sqrt x x就行了。