我需要 C# 中的计算 (9173501*9173502*9173504)%9173503;
本文关键字:9173502 9173504 %9173503 9173501 计算 | 更新日期: 2023-09-27 18:33:06
我需要 C# 中的计算(9173501 * 9173502 * 9173504) % 9173503
;result = 2,但 C# 无法计算它。 如果你有任何想法,请帮助我。
没有必要
使用大整数。
使用此公式:
(x * y) % k = ((x % k) * (y % k)) % k
这样,您可以将模应用于两个数字的乘积,每个数字都将< 9173503
,因此此乘积将适合long
。
注意:加法也是如此:
(x + y) % k = ((x % k) + (y % k)) % k
和减法,略有变化:
(x - y) % k = ((((x % k + k) % k) - ((y % k + k) % k)) % k + k) % k
但是,它不适用于除法:
(4 / 2) % 3 = 2
4 mod 3 = 1
2 mod 3 = 2
1 / 2 != 2
在开始计算之前,将您的数字转换为 BigInteger:
Console.WriteLine((new BigInteger(9173501)*9173502*9173504)%9173503);
// Output: 2
没有BigInteger
就无法直接计算它,但在数学上它相当于:
((long)9173501 % 9173503) * (9173502 % 9173503) * (9173504 % 9173503) % 9173503
这是一个数学问题,而不是编程问题。
如您所见,这些数字彼此非常接近,因此替换n = 9173503
将得到:(n-2)(n-1)(n+1) % n
。
打开括号,你会得到以下多项式:n^3 - 2*n^2 - n + 2
,余数n
将是:
- 每 n 个 2 个> 2 个
- 0 表示 n = 1, 2
这意味着不仅(9173501 * 9173502 * 9173504) % 9173503 = 2
,而且13^127^61 * (13^127^61 + 1) * (13^127^61 + 3) % (13^127^61 + 2)
也是2
,这很可能是不能用C#或其他编程语言计算的。