c语言 实现二进制模2运算程序,快速模幂运算的两个C语言程序

这两段代码都不是大整数计算的程序,是2进制64整数的计算程序,数据不能大于2进制63位。两段代码分别如下:

uint64_t mul_mod(uint64_t a, uint64_t b, uint64_t m)

{

uint64_t d = 0, mp2 = m >> 1;

int i;

if (a >= m) a %= m;

if (b >= m) b %= m;

for (i = 0; i < 64; ++i)

{

d = (d > mp2) ? (d << 1) - m : d << 1;

if (a & 0x8000000000000000ULL)

d += b;

if (d > m) d -= m;

a <<= 1;

}

return d;

}

uint64_t mul_mod(uint64_t a, uint64_t b, uint64_t m)

{

long double x;

uint64_t c;

int64_t r;

if (a >= m) a %= m;

if (b >= m) b %= m;

x = a;

c = x * b / m;

r = (int64_t)(a * b - c * m) % (int64_t)m;

return r < 0 ? r + m : r;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值