题意:
从1~n个数中选k个数,使得其中这k个数的最大公约数最大。并输出这个最大公约数。
思路:
我们这道题采用逆向思维,我们设最大公约数为i,那么我们就是要从中n个数中这么选
\[ i,2×i,3×i,4×i,\cdots,k×i \]
那么我们希望\(k×i\)尽量大,所以我们就可以得到以下不等式:
\[ i×k\leq n \]
所以我们直接输出 n div k 的值就可以了
代码:
#include <iostream>
#include <cstdio>
#include <algorithm>
using namespace std;
int n,k;
int main(){
scanf ("%d%d",&n,&k);
if (k==1) {
printf ("%d\n",n);
return 0; //如果只选一个数那么就选最大的数
}
cout<<n/k<<endl;
return 0;
}