Katlana Ədədləri#9643

Katlana Ədədləri (Həll təhlili)

Yenidənqaytarma əlaqəsini aşağıdakı kimi yazaq:

c_0 = 1, \\ c_n = c_0c_{n-1} + c_1c_{n-2} + c_2c_{n-3} + ... + c_{n-1}c_0,~n > 0~iken

Məsələn,

c_n dəyəri əvvəlki bütün c_0, c_1, c_2, ..., c_{n-1} dəyərlərinə əsasən hesablandığı üçün, Katalan ədədlərini xətti bir massivdə saxlayacağıq.

Alqoritmin reallaşdırılması

Katalan ədədlərinin dəyərlərini saxlayacağımız massivini elan edəcəyik: cat[i] = c_i.

long long cat[10001];

Giriş məlumatlarını oxuyuruq.

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

Yenidənqaytarma formuluna əsasən Katalan ədədlərini hesablayırıq.

cat[0] = 1;
for (i = 1; i <= n; i++)
{
  for (j = 0; j < i; j++)
    cat[i] = (cat[i] + cat[j] * cat[i - j - 1]) % m;
}

-ci Katalan ədədini çıxışa veririk.

printf("%lld\n", cat[n]);

Python reallaşdırılması

Giriş məlumatlarını oxuyuruq.

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

Katalan ədədlərinin dəyərlərini saxlayacağımız siyahısını elan edirik: cat[i] = c_i.

cat = [0] * (n + 1)

Yenidənqaytarma formuluna əsasən Katalan ədədlərini hesablayırıq.

cat[0] = 1
for i in range(1, n + 1):
  for j in range(i):
    cat[i] = (cat[i] + cat[j] * cat[i - j - 1]) % m

-ci Katalan ədədini çıxışa veririk.

print(cat[n])