как рассчитать обратный модуль

теперь у меня есть одна формула:

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

но как рассчитать обратный модуль, чтобы получить наименьший «x», если я уже знаю результат

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

я имею в виду, какова формула или логика, чтобы получить x


person Ivan Li    schedule 31.08.2012    source источник
comment
множество значений x удовлетворят этому уравнению. Было бы справедливо сказать, что возможности безграничны, но не в пределах 55 и int.MaxValue.   -  person Jodrell    schedule 31.08.2012
comment
@Jodrell Было заявлено, что он ищет наименьший x. Это ограничивает его.   -  person Corey Ogburn    schedule 31.08.2012
comment
@CoreyOgburn ой, хорошая мысль.   -  person Jodrell    schedule 31.08.2012
comment
Я думаю, что самая низкая на самом деле -9   -  person Jodrell    schedule 31.08.2012
comment
Я полагаю, наименьшее положительное x ...   -  person digEmAll    schedule 31.08.2012
comment
@Jodrell: да, это моя точка зрения ...   -  person digEmAll    schedule 31.08.2012


Ответы (5)


Это может быть не X, который изначально использовался в модуле, но если у вас есть

(A + x) % B = C

Ты можешь сделать

(B + C - A) % B = x

person Corey Ogburn    schedule 31.08.2012
comment
Неважно, ответ @digEmAll указывает, где мой терпит неудачу. Отредактировано с учетом этого. - person Corey Ogburn; 31.08.2012
comment
это, конечно, первый и хороший ответ, но @digEmAll напрямую решает мою проблему с обработкой операторов if. но в любом случае, спасибо, вы, ребята, мне очень помогаете. - person Ivan Li; 31.08.2012

x = (44 - 53) % 62 должно работать?

x = (44 - a) % length;
person TheHe    schedule 31.08.2012

как насчет

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

Теперь я знаю, что этот ответ ошибочен, потому что он не дает наименьшего, но .First() исправит это.

person Jodrell    schedule 31.08.2012

Кому нужен компьютер? Если 53 + x сравнимо с 44 по модулю 62, то мы знаем, что для целого числа k

53 + x + 62*k = 44

Решая x, мы видим, что

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

Ясно, что наименьшие решения равны -9 (при k=0) и 53 (при k=1).

person Community    schedule 31.08.2012

person    schedule
comment
@Ivan Li: его div + remainder - a - это мой B + C - A. Если мой не работает с другими номерами, то и этот тоже. - person Corey Ogburn; 31.08.2012
comment
В этом случае никакие ответы не работают. Я не пытаюсь дискредитировать ваш ответ @digEmAll, я просто чувствую себя немного обиженным из-за того, что у меня такое же основное уравнение, как у вас (за 12 минут до вас), просто без очевидной проверки. - person Corey Ogburn; 31.08.2012
comment
Однако правильно ли считать наименьшим положительным x? В противном случае наименьшее значение в вашем примере должно быть -9, а не 53... - person digEmAll; 31.08.2012
comment
@CoreyOgburn: на самом деле это то, что обрабатывает мое условие if. (2 + 1) % 8 = 3 и remainder - a дают ровно 1... в то время как равная часть наших кодов дает 9... - person digEmAll; 31.08.2012
comment
Ты меня зацепил, я об этом не подумал. Мое редактирование теперь объясняет все это одним уравнением, но этим я обязан вам. - person Corey Ogburn; 31.08.2012