7

今、私は1つの式を持っています:

int a = 53, x = 53, length = 62, result;
result = (a + x) % length;

しかし、結果がすでにわかっている場合、逆モジュラスを計算して最小の「x」を取得する方法

(53 + x) % 62 = 44
//how to get x

つまり、x を取得するための数式またはロジックは何ですか

4

5 に答える 5

12
private int ReverseModulus(int div, int a, int remainder)
{
   if(remainder >= div)
      throw new ArgumentException("Remainder cannot be greater than or equal to divisor");
   if(a < remainder)
      return remainder - a;
   return div + remainder - a;
}

例:

// (53 + x) % 62 = 44
var res = ReverseModulus(62,53,44); // res = 53

// (2 + x) % 8 = 3
var res = ReverseModulus(8,2,3); // res = 1
于 2012-08-31T15:50:36.003 に答える
5

モジュラスで最初に使用されたのは X ではないかもしれませんが、

(A + x) % B = C

できるよ

(B + C - A) % B = x

于 2012-08-31T15:39:13.683 に答える
1

x = (44 - 53) % 62 動作する必要がありますか?

x = (44 - a) % length;
于 2012-08-31T15:43:10.887 に答える
1

どうですか

IEnumerable<int> ReverseModulo(
    int numeratorPart, int divisor, int modulus)
{
   for(int i = (divisor + modulus) - numeratorPart; 
       i += divisor; 
       i <= int.MaxValue)
   {
       yield return i;
   }
}

私は今、この答えに欠陥があることを認識してい.First()ます。

于 2012-08-31T15:46:37.187 に答える
0

誰がコンピュータを必要としますか? 53 + x が 62 を法として 44 に合同である場合、整数 k に対して次のことがわかります。

53 + x + 62*k = 44

x を解くと、

x = 44 - 53 - 62*k = -9 - 62*k

明らかに、最小の解は -9 (k=0 の場合) と 53 (k=1 の場合) です。

于 2012-08-31T20:19:43.080 に答える