【问题标题】:C# ModPow -1 problemsC# ModPow -1 问题
【发布时间】:2014-06-11 11:51:06
【问题描述】:

我正在尝试这个:

BigInteger.ModPow(x, -1, z);

但是这种方法不能使用 -1 作为 Pow 参数。是否有任何已经在 C# 中实现的类可以做到这一点,或者我需要创建自己的类?

【问题讨论】:

  • C# ModInverse Function 的可能重复项
  • 改用BigInteger.ModPow(x,z-2,z);
  • @ja72 是的,但如果z 不是质数,则它将不起作用,例如在BigInteger.ModPow(value: 7, exponent: 60-2, modulus: 60) 中,我在对Hans Passant 的回答的评论中将其用作案例。

标签: c# modulo pow


【解决方案1】:

牢记您的高中数学书标识:x ^ -1 == 1/x。所以这很简单:

  BigInteger.DivRem(BigInteger.Divide(BigInteger.One, x), z, out remainder);

【讨论】:

  • 这不起作用!我们想要模逆。例如BigInteger.ModPow(value: 7, exponent: -1, modulus: 60) 我们想要结果 43 因为 7^(-1) 或 1/7 是 43 模 60。这是因为 7*43 给出 1模 60。如果 x 不平凡,您的答案将始终失败,因为 BigInteger.Divide(1, x) 被视为一个有理数(介于 0 和 1 之间),它将被截断为零。因此,您首先要丢弃有关x 的所有信息,之后我们就没有成功的希望了。
猜你喜欢
  • 2013-10-09
  • 1970-01-01
  • 1970-01-01
  • 2016-10-15
  • 1970-01-01
  • 2018-01-13
  • 2020-09-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多