NCk mod p in Ruby

Einführung

Als ich AtCoders frühere Frage löste (ABC145 - D), fiel es mir schwer, nCk mod p zu finden. Daher So finden Sie den Binomialkoeffizienten (nCk mod. P) und das inverse Element (a ^ -1 mod. P), die häufig ausgeführt werden Ich werde die benutzerfreundliche ModCombination-Klasse hier lassen, die neu geschrieben wurde.

Code

class ModCombination
    def initialize(max)
        @MOD = 10 ** 9 + 7
        @fact = [1, 1]
        @factinv = [1, 1]
        @inv = [0, 1]
        2.upto(max) do |i|
            @fact << @fact[i-1] * i % @MOD
            @inv << @MOD - @inv[@MOD % i] * (@MOD / i) % @MOD
            @factinv << @factinv[i-1] * @inv[i] % @MOD
        end
    end
    def com(n, k)
        return 0 if n < k
        return 0 if n < 0 || k < 0
        return @fact[n] * (@factinv[k] * @factinv[n-k] % @MOD) % @MOD
    end
end

Wie benutzt man

max = 10 ** 6
comb = ModCombination.new(max)
puts comb.com(n, k) # nCk mod 10 ** 9 + 7

abschließend

Ich werde es weglassen, weil ich denke, dass es herauskommt, wenn ich überprüfe, was der obige Code tut. Ich hoffe, dieser Artikel führt zu jemandes AC.

Recommended Posts

NCk mod p in Ruby
Ausgabedreieck in Ruby
Arten von Variablen in Ruby
Schneller Popcount in Ruby
ABC177 - E in Ruby lösen
Überprüfen Sie JWT-Token in Ruby
Schreiben Sie die Klassenvererbung in Ruby
Aktualisieren Sie Ruby in der Unicorn-Umgebung
Ganzzahlen, die in Ruby 2.4 zu Ganzzahlen zusammengefasst sind
[Ruby] Ausnahmebehandlung in Funktionen
Verwenden Sie Ruby-Variablen in Javascript.
Multiplikation innerhalb eines Ruby-Arrays
Über reguläre Ausdrücke in Ruby
Wie man in Ruby auf unbestimmte Zeit iteriert
Versuchen Sie, Yuma in Ruby zu implementieren
Erzielen Sie eine dreistellig begrenzte Anzeige in Ruby
Codierung unter Windows + Ruby
So installieren Sie Bootstrap in Ruby
Implementieren Sie den gRPC-Client in Ruby
Schreiben Sie Schlüssel und Werte in Ruby
[Super Einführung] Über Symbole in Ruby
Hanachan in Ruby (zerstörungsfreie Array-Manipulation)
OpenSL-Versionsinformationen in Ruby OPENSSL_VERSION
Ruby-Methoden, die häufig in Rails verwendet werden
Segfo Ruby in 2 Zeilen