我需要(9173501 * 9173502 * 9173504) % 9173503在C#中进行计算; result = 2但C#无法计算它.如果您有任何想法请帮助我.
IVl*_*lad 47
没有必要使用大整数.
使用此公式:
(x * y) % k = ((x % k) * (y % k)) % k
Run Code Online (Sandbox Code Playgroud)
这样,您可以将模数应用于两个数字的乘积,每个数字都是< 9173503,所以这个产品适合于long.
注意:添加也是如此:
(x + y) % k = ((x % k) + (y % k)) % k
Run Code Online (Sandbox Code Playgroud)
减法,略有变化:
(x - y) % k = ((((x % k + k) % k) - ((y % k + k) % k)) % k + k) % k
Run Code Online (Sandbox Code Playgroud)
但是,它不适用于分裂:
(4 / 2) % 3 = 2
4 mod 3 = 1
2 mod 3 = 2
1 / 2 != 2
Run Code Online (Sandbox Code Playgroud)
在开始计算之前将您的号码转换为BigInteger:
Console.WriteLine((new BigInteger(9173501)*9173502*9173504)%9173503);
// Output: 2
Run Code Online (Sandbox Code Playgroud)
你不能直接计算它BigInteger,但在数学上它相当于:
((long)9173501 % 9173503) * (9173502 % 9173503) * (9173504 % 9173503) % 9173503
Run Code Online (Sandbox Code Playgroud)