LL qmi(LL x, LL k) { LL res = 1; while (k) { if (k & 1) res = res * x % P; x = x * x % P; k >>= 1; } return res; } LL inv(LL x) { return qmi(x, P - 2); }
时间: 2024-04-19 18:26:03 浏览: 15
这段代码是一个求幂函数和求逆元函数的实现。函数`qmi`接收两个参数`x`和`k`,其中`x`是底数,`k`是指数。该函数使用快速幂算法来计算`x`的`k`次方,并对结果取模。函数首先初始化一个变量`res`为1,然后进入一个循环,当`k`不为0时,判断`k`的最低位是否为1(通过与1进行位与操作),如果是1,则将`res`乘以`x`并对结果取模。接着将`x`平方并对结果取模,最后将`k`右移一位。循环结束后,返回最终结果`res`。函数`inv`调用了函数`qmi`来计算`x`的逆元,其中逆元的定义是对于给定的整数`x`和模数`P`,满足`(x * inv(x)) % P = 1`。所以函数`inv(x)`实际上是调用了函数`qmi(x, P - 2)`来计算`x^(P-2)`。
相关问题
我这份求组合数的代码全都输出0是怎么回事?输入为3 2 4 2 5 2 10 5 1000 500 1000 1000 1000 10000 10000 1000 10000 5000 40000 20000#include <iostream> #include <cstring> using namespace std; typedef __int128 ll; const int N = 1e5 + 10; const ll mod = 1000000000000000007; int fact[N], infact[N]; int qmi(int a, ll b, ll p) { int res = 1; while (b) { if (b & 1) res = res * a % p; a = a * a % p; b >>= 1; } return res; } ll read() { ll x = 0, f = 1; char ch = getchar(); while (ch < '0' || ch > '9') { if (ch == '-') f = -1; ch = getchar(); } while (ch >= '0' && ch <= '9') { x = x * 10 + ch - '0'; ch = getchar(); } return x * f; } void write(ll x) { if (x < 0) { putchar('-'); x = -x; } if (x > 9) write(x / 10); putchar(x % 10 + '0'); } int main() { fact[0] = infact[0] = 1; for (int i = 1; i < N; ++ i ) { fact[i] = (ll)fact[i - 1] * i % mod; infact[i] = (ll)infact[i - 1] * qmi(i, mod - 2, mod) % mod; } int T = 10; while ( T -- ) { int a = read(), b = read(); if (a < b) { puts("0"); continue; } ll res = (ll)fact[a] * infact[b] % mod * infact[a - b] % mod; write(res); puts(""); } return 0; }
你的代码中使用了 __int128 类型,这是一个可以存储非常大的整数的数据类型,但是一般的编译器都不支持这个类型。因此,你需要使用一些特殊的编译器或者库来编译这个程序。如果你使用的是普通的编译器,那么代码中的 __int128 类型会被当做未定义的类型,从而导致编译错误。如果你使用了特殊的编译器或者库来编译这个程序,那么可能是你的输入数据有误,导致程序输出了0。建议你检查一下输入数据是否正确。
qmi_fixed_intf(0x19d2, 0x0579, 1)
qmi_fixed_intf(0x19d2, 0x0579, 1)是一个函数调用,用于设置QMI固定接口的相关参数。
其中,0x19d2表示设备的供应商ID,而0x0579表示设备的产品ID。这些ID是用于识别设备制造商和设备型号的编码。
第三个参数1表示启用QMI固定接口。
QMI是Qualcomm MSM Interface的缩写,是一种用于与高通芯片相关设备进行通信的协议。QMI固定接口是一种特定的通信接口,用于在设备和主机之间传输数据和控制命令。
调用qmi_fixed_intf(0x19d2, 0x0579, 1)函数将设置设备的供应商ID、产品ID和启用QMI固定接口。这意味着设备将使用指定的QMI固定接口进行通信,以便主机可以与设备进行数据交换和控制。
该函数调用语句可能在设备驱动程序或与设备通信的应用程序中使用,以确保设备正确配置并与主机正常通信。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![docx](https://img-home.csdnimg.cn/images/20210720083331.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)