0Pricing
Competitive Programming Academy · Ders

Önceden Hesaplanmış Faktöriyellerle nCr

Kombinasyonları bir asal modulo göre sayın.

Önceden Hesaplanmış Faktöriyellerle nCr, CoddyKit'te ücretsiz bir Competitive Programming Academy dersidir. Bu, 4 dersinin 4. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, Competitive Programming Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Competitive Programming Academy kursu toplamda 4 dersten oluşur.

Kombinasyonları Sayma

Birçok problem, n öğe arasından r öğesini seçmenin kaç yolu olduğunu sorar; bu değer nCr ile gösterilir. Yarışmalarda bu sayının asal bir modül altındaki değeri istenir. 🧮

Faktöriyel Formülü

Klasik formüle göre nCr, n faktöriyelinin r faktöriyeli ile n eksi r faktöriyelinin çarpımına bölünmesine eşittir. Sorun, modül altında bölme yapılmasıdır.

# nCr = n! / (r! * (n-r)!)

Faktöriyeller Taşar

Tek bir faktöriyel bile astronomik ölçüde büyür; bu nedenle her birini p'ye göre modülo olarak hesaplayın. Böylece formül modül altında kesinliğini korurken tüm değerler küçük kalır.

Tüm Faktöriyelleri Önceden Hesaplayın

İhtiyaç duyduğunuz en büyük n değerine kadar bir faktöriyel dizisini bir kez oluşturun. Her öğe, önceki öğe ile indisinin çarpımının modül altında hesaplanmasıyla elde edilir.

fact[i] = fact[i-1] * i % MOD

Bölme İçin Tersler Gerekir

Formülde iki faktöriyene bölme yapıldığından bunların modüler terslerine ihtiyacınız vardır. Ters alma işleminin bölmeyi doğrudan bir çarpmaya dönüştürdüğünü hatırlayın.

En Büyük Faktöriyelinin Tersini Alın

En büyük faktöriyelinin tersini, p eksi 2 üssünü kullanarak Fermat yöntemiyle yalnızca bir kez hesaplayın. Bu tek çağrı geri kalan işlemlerin başlangıç değerini sağlar.

inv_fact[n] = pow(fact[n], MOD - 2, MOD)

Ters Faktöriyelleri Geriye Doğru Oluşturun

Diğer ters faktöriyelleri tek bir geriye doğru geçişte, her birini sonraki öğe ile indisinin çarpımından elde ederek hesaplayın. Ekstra pow çağrılarına gerek kalmaz.

inv_fact[i] = inv_fact[i+1] * (i+1) % MOD

nCr'yi Oluşturun

Artık nCr, fact[n] ile inv_fact[r] ve inv_fact[n minus r] değerlerinin çarpımının p'ye göre modülosudur. Her sorgu için üç dizi erişimi ve iki çarpma yeterlidir.

C = fact[n] * inv_fact[r] % MOD * inv_fact[n-r] % MOD

Her Sorgu Anında Tamamlanır

Ön hesaplamadan sonra her kombinasyon cevabı O(1) sürede bulunur. Bir problem binlerce nCr değeri istediğinde bu yöntem bu yüzden çok etkilidir.

Sınır Durumlarını Ele Alın

r negatifse veya n'den büyükse cevap 0 olur. Faktöriyel dizilerinizin dışına taşmamak için önce bu sınırı denetleyin.

if r < 0 or r > n: return 0

Dizileri Yeterince Büyük Oluşturun

Dizi boyutunu, tüm sorgulardaki en büyük n değerine küçük bir pay ekleyecek şekilde belirleyin. Çok küçük bir sınır, burada dizin hatalarının yaygın bir nedenidir.

N = 200005

Hızlı Kontrol

Ön hesaplamadan sonra tek bir nCr sorgusu ne kadar hızlıdır?

Özet

Faktöriyelleri ve terslerini bir kez önceden hesaplayıp her nCr sorgusunu üç dizi erişimiyle O(1) sürede yanıtlayabilirsiniz. r sınırlarını denetleyin ve dizileri yeterince büyük oluşturun. 🏆

Sıkça Sorulan Sorular

“Önceden Hesaplanmış Faktöriyellerle nCr” dersi ücretsiz mi?

Evet — “Önceden Hesaplanmış Faktöriyellerle nCr” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve Competitive Programming Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Competitive Programming Academy kursu toplamda 4 dersten oluşur.

“Önceden Hesaplanmış Faktöriyellerle nCr” dersinde ne öğreneceğim?

Kombinasyonları bir asal modulo göre sayın. Competitive Programming Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.

Competitive Programming Academy öğrenmeye başlamak için deneyim gerekli mi?

Önceden deneyim gerekmez. CoddyKit'te Competitive Programming Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 4. dersidir.

“Önceden Hesaplanmış Faktöriyellerle nCr” dersi ne kadar sürer?

Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.

Bu Competitive Programming Academy dersinde kod yazıp çalıştırabilir miyim?

Evet. Her Competitive Programming Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.

Bu kursun tüm dersleri

  1. Bir Asal Modulo Üzerinde Çalışma
  2. Hızlı Modüler Üs Alma
  3. Fermat ile Modüler Ters
  4. Önceden Hesaplanmış Faktöriyellerle nCr
← Competitive Programming Academy Sayfasına Dön