Lucas

int Power(int q, int n, int p) {
    if (n == 0)return 1 % p;
    return Power(q * q % p, n / 2, p) % p * (n & 1 ? q : 1) % p;
}

int Factorial(int n, int p) {
    if (n >= p)return 0;
    if (n == 0)return 1;
    return Factorial(n - 1, p) * n % p;
}

int Reverse_Factorial(int n, int p) {
    if (n >= p)return 0;
    if (n == 0)return 1;
    return Power(Factorial(n, p), p - 2, p) % p;
}

int C(int n, int m, int p) {
    if (m > n)return 0;
    return Factorial(n, p) % p * Reverse_Factorial(n - m, p) % p * Reverse_Factorial(m, p) % p;
}

int Lucas(int n, int m, int p) {
    if (n == 0 && m == 0)return 1;
    return C(n % p, m % p, p) * Lucas(n / p, m / p, p) % p;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值