从n个数中选k个数,求这k个数能取到的最大公约数

题目描述:从1,2,3……n个整数中选出k个数,使得这些数的的最大公约数最大,求这个最大公约数。1<=k<=n<=2*10^9

我们不妨假设最后的答案为a,则对于我们选择的一组情况{x1,x2……xk},不妨令这些数是从小到大排序的,那么对于a,会有x1>=a,x2>=2*a,x3>=3*a,……xk>=k*a……由于xk<=n,则有k*a<=n;则可以令a=[n/k],那么就取出了xi=[n/k]*i,这组显然是满足最大公约数为a,并且a取得了最大值。

代码如下:(事实上没啥发的必要********)

#include<stdio.h>
int main()
{
    int n, a;
    scanf("%d%d", &n, &a);
    printf("%d", n / a);
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值