You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

已知Math.imul()运算结果,如何求解其中一个输入参数x?

求解步骤

1. 理解Math.imul的运算本质

Math.imul(x, y)是JavaScript的32位有符号整数乘法,等价于取x*y的低32位再转为有符号整数,即:

(x * y) & 0xFFFFFFFF

题目中的等式可转化为模2^32的同余方程:
$$x \times 2654435761 \equiv 1447829970 \pmod{2^{32}}$$

2. 确认乘法逆元存在

2654435761(十六进制0x9E3779B9)是奇数,与232互质(最大公约数为1),因此它在模232下存在乘法逆元inv——满足:
$$2654435761 \times inv \equiv 1 \pmod{2^{32}}$$

3. 计算乘法逆元

通过扩展欧几里得算法可求得,2654435761的模2^32逆元为244002641(验证:Math.imul(2654435761, 244002641)结果为1)。

4. 求解x

将同余方程两边同时乘以逆元inv,得到:
$$x \equiv 1447829970 \times 244002641 \pmod{2^{32}}$$

直接用Math.imul计算该乘积的低32位:

const x = Math.imul(1447829970, 244002641);

5. 验证结果

代入原等式验证:

console.log(Math.imul(x, 2654435761)); // 输出1447829970,符合要求

最终满足条件的一个x值

十进制:1080503378,十六进制:0x40CA2C52

内容的提问来源于stack exchange,提问作者3jay1

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 11:47:07