我需要在C#中使用compute(9173501*9173502*9173504)%9173503;

Mem*_*yev -5 c#

我需要(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)

  • +1或者看数字甚至可能很简单((k-2)*(k-1)*(k + 1))%k =( - 2)*( - 1)*1 = 2 ...不需要使用任何计算 (11认同)
  • @AlexeiLevenkov - 但为什么当计算机可以为你使用智能时呢?:)我认为有些人有时会失去思考的能力. (4认同)

Str*_*ior 9

在开始计算之前将您的号码转换为BigInteger:

Console.WriteLine((new BigInteger(9173501)*9173502*9173504)%9173503);
// Output: 2
Run Code Online (Sandbox Code Playgroud)


D S*_*ley 5

你不能直接计算它BigInteger,但在数学上它相当于:

((long)9173501 % 9173503) * (9173502 % 9173503) * (9173504 % 9173503)  % 9173503
Run Code Online (Sandbox Code Playgroud)