Lösen mit Ruby, Perl, Java und Python AtCoder ATC 002 B.

Einführung

Der AtCoder Typical Contest (ATC) ist ein Wettbewerb, der typische Fragen in der Wettbewerbsprogrammierung stellt. Vielen Dank, AtCoder.

Dieses Thema

AtCoder Typical Contest 002 B - n^p mod m

Dieses Thema wiederholte quadratische Methode Ruby Wenn Sie beispielsweise 2 mit der 64. Potenz berechnen und einfach mit 2 multiplizieren, müssen Sie 63-mal multiplizieren. Wenn Sie jedoch das Berechnungsergebnis verwenden, können Sie durch 6-fache Multiplikation berechnen, was zu einer schnelleren Berechnung führt.

2^64.rb


n = 2
63.times do
  n *= 2
end
puts n # => 18446744073709551616

n = 2
6.times do
  n *= n
end
puts n # => 18446744073709551616

Die iterative Quadratmethode ist eine Anwendung auf ungerade Potenzen und Teiler.

ruby.rb


n, m, p = gets.split.map(&:to_i)
def mpow(n, p, mod)
  r = 1
  while p > 0
    r = r * n % mod if p & 1 == 1
    n = n * n % mod
    p >>= 1
  end
  r
end
puts mpow(n, p, m)

Wenn Sie es zu einer Funktion machen, können Sie es für spätere Wettbewerbe verwenden ~~ copy ~~.

Python

python.py


n, m, p = map(int, input().split())
def mpow(n, p, mod):
    r = 1
    while p > 0:
        if p & 1 == 1:
            r = r * n % mod
        n = n * n % mod
        p >>= 1
    return r
print(mpow(n, p, m))

Das Postfix wird nach dem Studium etwas mehr sein. Perl

perl.pl


chomp (my ($n, $m, $p) = split / /, <STDIN>);
sub mpow {
  my ($n, $p) = @_;
  my $r = 1;
  while ($p > 0) {
    $r = $r * $n % $m if $p & 1;
    $n = $n * $n % $m;
    $p >>= 1;
  }
  $r;
}
print mpow($n, $p), "\n";

Für * Perl * scheint es keinen Fehler im Bereich von $ m zu verursachen. Java

java.java


import java.math.BigInteger;
import java.util.*;

class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        BigInteger n = new BigInteger(sc.next());
        BigInteger m = new BigInteger(sc.next());
        BigInteger p = new BigInteger(sc.next());
        sc.close();
        System.out.println(n.modPow(p, m));
    }
}
Ruby Python Perl Java
Codelänge 183 Byte 217 Byte 227 Byte 386 Byte
Ausführungszeit 7 ms 17 ms 3 ms 106 ms
Erinnerung 1788 KB 3060 KB 640 KB 24020 KB

Zusammenfassung

Recommended Posts

Lösen mit Ruby, Perl, Java und Python AtCoder ATC 002 B.
Lösen mit Ruby, Perl, Java und Python AtCoder ATC 002 A.
Lösen mit Ruby, Perl, Java und Python AtCoder ABC 107 B String-Manipulation
Lösen mit Ruby, Perl, Java und Python AtCoder ABC 065 C-te Potenz
Lösen mit Ruby, Perl, Java und Python AtCoder AGC 033 Eine Suche mit Breitenpriorität
Lösen mit Ruby, Perl, Java und Python AtCoder ARC 098 C Kumulative Summe
Lösen mit Ruby, Perl, Java und Python AtCoder CADDi 2018 C Primfaktorisierung
AtCoder ABC 165 D Bodenfunktion in Ruby, Perl, Java und Python gelöst
Lösen mit Ruby, Perl, Java und Python AtCoder ABC 131 D Sortieren von Arrays
Lösen mit Ruby, Perl, Java und Python AtCoder diverta 2019 Programmierwettbewerb C String Manipulation
AtCoder ARC104 B Kumulative Summe in Ruby, Python und Java gelöst
Lösen mit Ruby, Python und numpy AtCoder ABC054 B Matrixberechnung
Lösen mit Ruby, Perl, Java und Python AtCoder ABC 047 C Regulärer Ausdruck
Lösen mit Ruby und Python AtCoder CODE FESTIVAL 2016 qual C B Priority Queue
Lösen mit Ruby, Perl, Java und Python AtCoder ARC 066 C Iterativer Square Hash
Lösen mit Ruby und Python AtCoder ARC 059 C Minimum-Quadrat-Methode
Lösen mit Ruby und Python AtCoder ABC178 D Dynamische Planungsmethode
Lösen mit Ruby und Python AtCoder AISING2020 D Iterative Square-Methode
Lösen mit Ruby und Python AtCoder ABC011 C Dynamische Planungsmethode
Lösen mit Ruby und Python AtCoder ARC067 C Primfaktorisierung
Lösen mit Ruby und Python AtCoder ABC138 D Benachbarte Liste
Lösen in Ruby, Python und Java AtCoder ABC141 D Priority Queue
Lösen mit Ruby, Python und networkx AtCoder ABC168 D Benachbarte Liste
Lösen mit Ruby und Python AtCoder ABC057 C Zerlegung des Primfaktors Bit vollständige Suche
Lösen mit Ruby und Python AtCoder Tenka1 Programmer Contest C Kumulative Summe
Lösen mit Ruby, Perl, Java und Python AtCoder ARC 086 C Hash-Sortierung
Scraping mit Node, Ruby und Python
Lösen mit Ruby und Python AtCoder ABC133 D Kumulative Summe
AtCoder JSC2019 Qual B Gelöst von Ruby und Python
Listen Sie Split- und Join-Zeichenfolgen mit Split und Join auf (Perl / PowerShell / Java / Kotlin / Python).
Mit Ruby (Rails) verschlüsseln und mit Python entschlüsseln
Einfaches Web-Scraping mit Python und Ruby
AtCoder Anfängerwettbewerb 170 B Problem "Crane and Turtle" Erklärung (Python3, C ++, Java)
MessagePack-Versuchen Sie, Java und Python mit RPC zu verbinden
Lösen des Lorenz 96-Modells mit Julia und Python
AtCoder ABC110 C-String-Manipulation zum Lösen in Ruby
Lösen mit Ruby und Python AtCoder ABC084 D Kumulative Summe der Primzahlen
Löse AtCoder 167 mit Python
Python und Ruby teilen sich
AtCoder ARC080 D Simulation mit Ruby und Python gelöst
Untersuchen Sie den Java- und Python-Datenaustausch mit Apache Arrow
Vergleich von CoffeeScript mit JavaScript-, Python- und Ruby-Grammatik
Versionsverwaltung von Node, Ruby und Python mit anyenv
Programmieren mit Python und Tkinter
Löse AtCoder ABC166 mit Python
Hellblau mit AtCoder @Python
AtCoder-Anfängerwettbewerb 177 B Problem "Teilzeichenfolge" Erläuterung (Python3, C ++, Java)
[AtCoder Erklärung] Kontrollieren Sie ABC180 A, B, C Probleme mit Python!
Python und Hardware-Verwenden von RS232C mit Python-
Java VS PHP VS Python VS Ruby
Mathematik mit Python lösen (unvollständig)
Python und Ruby Slice Memo
Ich habe Java und Python verglichen!
Zundokokiyoshi mit Python / Rubin / Lua
Über Perl, Python, PHP, Ruby
[AtCoder Erklärung] Kontrollieren Sie ABC158 A, B, C Probleme mit Python!
Nampre mit Python lösen (Teil 2)
Python mit Pyenv und Venv
Hallo Welt in verschiedenen Sprachen [Python / PHP / Java / Perl / Ruby]
AtCoder-Anfängerwettbewerb 169 B Problem "Multiplikation 2" Erläuterung (Python3, C ++, Java)