题目
给一个歌单固定长度为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;
}