我有 ac 结构
typedef struct u128b {
uint64_t hi,
uint64_t lo
} u128b
当所有 3 个变量 x、ė 和 m 都是 u128b 结构时,我将如何执行模表达式 x^e mod m?
我试图从https://stackoverflow.com/a/20114154/11667622运行代码
u128b mul_mod(u128b a, u128b b, u128b m)
{
if (m == 0)
return a * b;
u128b r = {0, 0};
while(a > 0)
{
if (a & 1)
if ((r += b) > m) r %= m;
a >>= 1;
if ((b <<= 1) > m) b %= m;
}
return r;
}
//https://stackoverflow.com/questions/20111827/various-questions-about-rsa-encryption/20114154#20114154
u128b pow_mod(u128b base, u128b expon, u128b mod)
{
u128b remainder = {0, 1};
while (expon > 0) {
if (expon & 1)
remainder = mul_mod(r, base, mod);
base = mul_mod(base, base, mod);
expon >>= 1;
}
return remainder;
}
这在所有参数和变量都是 uint64_t 时有效,但是我如何将它应用于所有 3 个变量的两个单独的 64 位变量 hi 和 low ?在 hi 和 lo 之间移动位?模如何与高位和低位一起工作?