Разбор
Первые два слагаемых суммы отличаются от остальных. Вычислим их отдельно. Далее считаем сумму в цикле по от до , каждое слагаемое имеет вид .
Реализация алгоритма
Функция powmod вычисляет значение .
long long powmod(long long x, long long n, long long m) { if (n == 0) return 1; if (n % 2 == 0) return powmod((x * x) % m, n / 2, m); return (x * powmod(x, n - 1, m)) % m; }
Основная часть программы. Читаем входные данные.
scanf("%lld %lld", &n, &m);
Вычисляем .
res = (powmod(1, n, m) + powmod(2, n, m)) % m;
Находим остальную часть суммы.
for (i = 3; i <= 100; i++) res = (res + (i - 1) * powmod(i, n, m)) % m;
Выводим ответ.
printf("%lld\n", res);
Python реализация
Функция myPow вычисляет значение .
def myPow(x, n, m): if n == 0: return 1 if n % 2 == 0: return myPow((x * x) % m, n / 2, m) return (x * myPow(x, n - 1, m)) % m
Основная часть программы. Читаем входные данные.
n, m = map(int, input().split())
Вычисляем .
res = (myPow(1, n, m) + myPow(2, n, m)) % m
Находим остальную часть суммы.
for i in range(3, 101): res = (res + (i - 1) * myPow(i, n, m)) % m
Выводим ответ.
print(res)