müxtəlif obyektdən ibarət a_1, ..., a_{2n} çoxluğuna baxaq və bu çoxluqdan obyekti neçə üsulla seçmək olduğunu hesablayaq.
Bir tərəfdən, binomial əmsalın tərifinə görə bu say C_{2n}^n-ə bərabərdir.
Diğər tərəfdən, çoxluğu obyektdən ibarət iki hissəyə bölək:
obyektdən ibarət istənilən dəst, sol yarıdan götürülən obyektlərin sayı k~(0 \le k \le n) ilə birmənalı şəkildə müəyyən olunur: bu zaman sağ yarıdan dəqiq n - k obyekt götürülür. Sabit üçün sol yarıdan obyekti C_n^k üsulla, sağ yarıdan isə n - k obyekti C_n^{n-k} üsulla seçmək olar. Vurma qaydasına görə, verilmiş üçün dəstlərin sayı
bərabərdir, çünki simmetriya xassəsinə görə C_n^{n-k} = C_n^k.
Müxtəlif qiymətlərinə kəsişməyən dəst çoxluqları uyğun gəlir, isə -dan -ə qədər bütün qiymətləri alır. Toplama qaydasına görə, ümumi üsulların sayı
bərabərdir.
İki hesablama nəticəsini bərabərləşdirərək, aşağıdakı eyniliyi (Vandermond eyniliyinin xüsusi halı) alırıq:
Misal
n = 3 üçün cavab (C_3^0)^2 + (C_3^1)^2 + (C_3^2)^2 + (C_3^3)^2 = 1^2 + 3^2 + 3^2 + 1^2 = 20-ə bərabərdir.
Eyni zamanda C_6^3 = {6! \over 3! \cdot 3!} = {4 \cdot 5 \cdot 6 \over 6} = 20.
Alqoritmin realizasiyası
Cnk funksiyası C_n^k binomial əmsalının qiymətini hesablayır.
long long Cnk(long long n, long long k)
{
long long res = 1;
if (k > n - k) k = n - k;
for (long long i = 1; i <= k; i++)
res = res * (n - i + 1) / i;
return res;
}Proqramın əsas hissəsi. Giriş dəyəri -i oxuyuruq.
scanf("%lld", &n);Cavabı hesablayıb çap edirik.
res = Cnk(2*n, n);
printf("%lld\n", res);Java realizasiyası
import java.util.*;
public class Main
{
public static long Cnk(long n, long k)
{
long res = 1;
if (k > n - k) k = n - k;
for (long i = 1; i <= k; i++)
res = res * (n - i + 1) / i;
return res;
}
public static void main(String[] args)
{
Scanner con = new Scanner(System.in);
long n = con.nextLong();
long res = Cnk(2*n, n);
System.out.println(res);
con.close();
}
}Python realizasiyası
Cnk funksiyası C_n^k binomial əmsalının qiymətini hesablayır.
def Cnk(n, k):
res = 1
if k > n - k: k = n – k
for i in range(1, k+1):
res = res * (n - i + 1) // i
return resProqramın əsas hissəsi. Giriş dəyəri -i oxuyuruq.
n = int(input())Cavabı hesablayıb çap edirik.
res = Cnk(2 * n, n)
print(res)Python realizasiyası – comb
Giriş dəyəri -i oxuyuruq.
n = int(input())Cavabı hesablayıb çap edirik.
res = math.comb(2 * n, n)
print(res)