Что означает «вычислить по модулю 1 000 000 007»? - PullRequest
1 голос
/ 13 апреля 2020

У меня проблема с конкурсом. Прилагаем отрывок здесь -

Найдите максимальную прибыль, которую шеф-повар может получить, если продаст свои автомобили оптимальным образом. Поскольку это число может быть большим, вычислите его по модулю 1 000 000 007 (10 ^ 9 + 7).

Означает ли это просто, что я должен найти остаток от окончательной прибыли при делении на 1000000007? Простите за этот простой вопрос, язык не ясен.

Ответы [ 2 ]

1 голос
/ 13 апреля 2020

В контексте этого замечания 10 ^ 9 + 7 следует понимать как 10 9 + 7 , что составляет 1000000007.

Очень большие числа будут превышать диапазон целочисленных типов, поэтому вас просят вычислить результат по модулю 1000000007, который может быть достигнут путем уменьшения промежуточных результатов по модулю 1000000007 всякий раз, когда они превышают или равны этому значению, если окончательный результат получается сложением и умножением. Модульная арифметика обладает многими более интересными свойствами.

Например, вы можете вычислять факториалы по модулю 1000000007 следующим образом:

long factorial_mod(int n) {
    long res = 1;
    for (int i = 2; i <= n; i++) {
        res = res * (long long)i % 1000000007;
    }
    return res;
}
0 голосов
/ 13 апреля 2020

То, как задача получает максимальную прибыль, будет очень большим числом, поэтому для удобства вы должны сделать maxprofit modulo 10^9+7 (это больше похоже на псевдокод).

Это можно сделать в C следующим образом:

#include<stdio.h>

//include your code to find maxprofit 

modifiedmaxprofit=maxprofit%((10^9)+7) //the percentage operator in C and most languages represents modulo


...