逆元求组合数

快速幂与组合数取模

题目

给一个歌单固定长度为K
有两种歌:X首长度为A,Y首长度为B的歌,A!=B
问有几种组合搭配
如:
输入 K = 5,A = 2 X = 3 B = 3 Y = 3
输出 9
由于结果比较大,因此输出结果取1000000007的余数。

思路

腾讯春招实习笔试题……用自己的方法瞎做最后发现除数那里的取余不知道怎么取。

问了yz大佬,给我一篇博客,大概是“逆元求组合数”“费马小定理”。

  • 快速幂
    百度百科上的解释

    快速幂就是不同于平时一个数一个数相乘求幂的方法,举个例子,求a ^ b(a的b次方):

    a ^ 11 = a ^ ( 2 ^ 0 + 2 ^ 1 + 2 ^ 3) = a ^ (2 ^ 0) + a ^ (2 ^ 1) + a ^ (2 ^ 3)

    也就是把右上角的次方:11拆成二进制表达方式: 2 ^ 0 + 2 ^ 1 + 2 ^ 3 == 1011

  • 快速幂取模算法

    笔试的时候我是粗暴使用了上面博客直接取模第3种的方法。

    这里的快速幂需要知道以下公式:
    这里写图片描述


// 依照上面公式,不考虑取模的写法如下:
// a^b
int power_mod(int a, int b) {
    int ans = 1;
    while (b) {
        if (b%2) {
            ans *= a;
        }
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值