Выражение с участием модульных возведения в степень в C ++

0

Я хочу оценить выражение, (a n + b n + c n) % 1000000003, в C++. Я получаю ошибки переполнения, когда n очень велико. Может кто-то помочь мне с этим? Более конкретно a = q + 1, b = - 2 * q и c = q - 1. Я выполнял функцию, изложенную в этом

Могу ли я сломать (a n + b n + c n) % 1000000003 в (a n) % 1000000003 + (b n) % 100000003 + (c n) % 1000000003 или что-то подобное? Также я не могу использовать ничего больше, чем unsigned long long int

Теги:
exponentiation

1 ответ

0
Лучший ответ

Вы можете распространять свой модуль. Математически это будет звучать:

( ((a^n)%1000000003) + ((b^n)%100000003) + ((c^n)%1000000003) ) % 1000000003;

Это позволит вам не вычислять числа, которые находятся за пределами границ, что позволяет вам выбирать более крупные значения для n.

Доказательство.

Просто не забудьте использовать pow в модуле math.h:

( ((pow(a, n))%1000000003) 
    + ((pow(b, n))%100000003) 
    + ((pow(c, n))%1000000003) ) % 1000000003;
  • 0
    но, как вы видите, b отрицательно, не приведет ли это к ошибочным результатам?
  • 0
    Смотрите этот ответ . Если вы не хотите негативов, обрабатывайте их в своем коде! :)
Показать ещё 4 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню