Dərəcələrin cəmi#9644

Dərəcələrin cəmi (Həll təhlili)

Sumanın ilk iki üzvü digərlərindən fərqlidir. Onları ayrı-ayrılıqda hesablayırıq. Daha sonra 3-dən 100-ə qədər dövrə girərək hər bir üzvün (i - 1) \cdot i^n formasında olduğunu hesablayırıq.

Alqoritmin implementasiyası

powmod funksiyası x^n~mod~m qiymətini hesablayır.

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;
}

Əsas proqram hissəsi. Giriş məlumatlarını oxuyuruq.

scanf("%lld %lld", &n, &m);

res = (1^n + 2^n)~mod~m hesablayırıq.

res = (powmod(1, n, m) + powmod(2, n, m)) % m;

Sumanın qalan hissəsini tapırıq.

for (i = 3; i <= 100; i++)
  res = (res + (i - 1) * powmod(i, n, m)) % m;

Cavabı çap edirik.

printf("%lld\n", res);

Python implementasiyası

myPow funksiyası x^n~mod~m qiymətini hesablayır.

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

Əsas proqram hissəsi. Giriş məlumatlarını oxuyuruq.

n, m = map(int, input().split())

res = (1^n + 2^n)~mod~m hesablayırıq.

res = (myPow(1, n, m) + myPow(2, n, m)) % m

Sumanın qalan hissəsini tapırıq.

for i in range(3, 101):
  res = (res + (i - 1) * myPow(i, n, m)) % m

Cavabı çap edirik.

print(res)