Разбор
Преобразуем выражение:
Удалив из списка числа и , вставлено будет .
Если далее удалить из списка и , то вставлено будет
Следуя по аналогии, можно утверждать что если изначально
то в конце останется число .
Поскольку изначально содержит целые числа от до , то в конце останется число
Реализация алгоритма
Объявим константы.
#define MOD 1000000007 #define MAX 1000002
Входные данные содержат несколько тестов. Объявим массив такой что .
long long p[MAX];
Читаем количество тестов . Вычисляем факториалы чисел, сохраняем .
scanf("%d", &tests); p[1] = 1; for (i = 2; i < MAX; i++) p[i] = (p[i - 1] * i) % MOD;
Обрабатываем тесты. Для каждого входного значения выводим .
while (tests--) { scanf("%d", &n); printf("%lld\n", p[n + 1] - 1); }
Python реализация
Объявим константы.
MOD = 1000000007 MAX = 1000002
Вычисляем факториалы чисел, сохраняем
p = [1] * MAX for i in range(2, MAX): p[i] = (p[i - 1] * i) % MOD
Читаем количество тестов .
tests = int(input())
Обрабатываем тесты. Для каждого входного значения выводим .
for _ in range(tests): n = int(input()) print(p[n + 1] - 1)