我需要 C# 中的计算 (9173501*9173502*9173504)%9173503;

本文关键字:9173502 9173504 %9173503 9173501 计算 | 更新日期: 2023-09-27 18:33:06

我需要 C# 中的计算(9173501 * 9173502 * 9173504) % 9173503;result = 2,但 C# 无法计算它。 如果你有任何想法,请帮助我。

我需要 C# 中的计算 (9173501*9173502*9173504)%9173503;

没有必要

使用大整数。

使用此公式:

(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#或其他编程语言计算的。