Résolution avec Ruby, Perl, Java et Python AtCoder ATC 002 B

introduction

Le concours typique AtCoder (ATC) est un concours qui pose des questions typiques dans la programmation compétitive. Merci, AtCoder.

Ce thème

AtCoder Typical Contest 002 B - n^p mod m

Ce thème, méthode carrée répétée Ruby Par exemple, lors du calcul de 2 à la puissance 64, si vous multipliez simplement par 2, vous devez multiplier 63 fois, mais en utilisant le résultat du calcul, vous pouvez calculer en multipliant 6 fois, ce qui conduit à un calcul plus rapide.

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

La méthode des carrés itératifs est une application de ceci aux puissances impaires et aux diviseurs.

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)

Si vous en faites une fonction, vous pouvez l'utiliser pour des concours ultérieurs ~~ copier ~~.

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))

Le suffixe sera après avoir étudié un peu plus. 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";

Pour * Perl *, cela ne semble pas causer d'erreur dans la portée de $ m. 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
Longueur du code 183 Byte 217 Byte 227 Byte 386 Byte
Temps d'exécution 7 ms 17 ms 3 ms 106 ms
Mémoire 1788 KB 3060 KB 640 KB 24020 KB

Résumé

Recommended Posts

Résolution avec Ruby, Perl, Java et Python AtCoder ATC 002 B
Résolution avec Ruby, Perl, Java et Python AtCoder ATC 002 A
Résolution avec Ruby, Perl, Java et Python AtCoder ABC 107 B Manipulation de chaînes
Résolution avec Ruby, Perl, Java et Python AtCoder ABC 065 C-th power
Résolution avec Ruby, Perl, Java et Python AtCoder AGC 033 A Recherche de priorité de largeur
Résolution avec Ruby, Perl, Java et Python AtCoder ARC 098 C Somme cumulative
Résolution avec Ruby, Perl, Java et Python AtCoder CADDi 2018 C factorisation premier
AtCoder ABC 165 D Floor Function résolue en Ruby, Perl, Java et Python
Résolution avec Ruby, Perl, Java et Python AtCoder ABC 131 D Tri des tableaux
Résolution avec Ruby, Perl, Java et Python AtCoder Diverta 2019 Concours de programmation Manipulation de chaînes C
AtCoder ARC104 B Somme cumulative résolue en Ruby, Python et Java
Résolution avec Ruby, Python et numpy AtCoder ABC054 B Calcul de la matrice
Résolution avec Ruby, Perl, Java et Python AtCoder ABC 047 C Expression régulière
Résolution avec Ruby et Python AtCoder CODE FESTIVAL 2016 qual C B Priority Queue
Résolution avec Ruby, Perl, Java et Python AtCoder ARC 066 C Hash carré itératif
Résolution avec Ruby et Python AtCoder ARC 059 C Méthode du carré minimum
Résolution avec Ruby et Python AtCoder ABC178 D Méthode de planification dynamique
Résolution avec Ruby et Python AtCoder AISING2020 D Méthode carrée itérative
Résolution avec Ruby et Python AtCoder ABC011 C Méthode de planification dynamique
Résolution avec Ruby et Python AtCoder ARC067 C factorisation premier
Résolution avec Ruby et Python AtCoder ABC138 D Liste adjacente
Résolution en Ruby, Python et Java AtCoder ABC141 D Priority Queue
Résolution avec Ruby, Python et networkx AtCoder ABC168 D Liste adjacente
Résolution avec Ruby et Python AtCoder ABC057 C Décomposition du facteur premier Recherche complète de bits
Résolution avec Ruby et Python AtCoder Tenka1 Programmer Contest C Somme cumulative
Résolution avec Ruby, Perl, Java et Python AtCoder ARC 086 C Hash Sorting
Scraping avec Node, Ruby et Python
Résolution avec Ruby et Python AtCoder ABC133 D Somme cumulée
AtCoder JSC2019 Qual B à résoudre par Ruby et Python
Répertorier les chaînes de fractionnement et de jointure avec fractionnement et jointure (Perl / PowerShell / Java / Kotlin / Python)
Crypter avec Ruby (Rails) et décrypter avec Python
Scraping Web facile avec Python et Ruby
AtCoder Beginner Contest 170 B Problème Explication "Crane and Turtle" (Python3, C ++, Java)
MessagePack-Try pour lier Java et Python avec RPC
Résolution du modèle Lorenz 96 avec Julia et Python
Manipulation de chaîne C AtCoder ABC110 à résoudre dans Ruby
Résoudre avec Ruby et Python AtCoder ABC084 D Somme cumulative des nombres premiers
Résolvez AtCoder 167 avec python
Python et Ruby se séparent
Simulation AtCoder ARC080 D résolue avec Ruby et Python
Étudiez l'échange de données Java et Python avec Apache Arrow
Comparaison de CoffeeScript avec la grammaire JavaScript, Python et Ruby
Gestion des versions de Node, Ruby et Python avec anyenv
Programmation avec Python et Tkinter
Résolvez AtCoder ABC166 avec python
Bleu clair avec AtCoder @Python
AtCoder Beginner Contest 177 B Explication du problème "Sous-chaîne" (Python3, C ++, Java)
[Explication AtCoder] Contrôle ABC180 Problèmes A, B, C avec Python!
Python et matériel - Utilisation de RS232C avec Python -
Java VS PHP VS Python VS Ruby
Résoudre les mathématiques avec Python (incomplet)
Mémo tranche python et rubis
J'ai comparé Java et Python!
Zundokokiyoshi avec python / rubis / Lua
À propos de Perl, Python, PHP, Ruby
[Explication AtCoder] Contrôle ABC158 Problèmes A, B, C avec Python!
Résolution de Nampre avec Python (partie 2)
python avec pyenv et venv
Hello World dans divers langages [Python / PHP / Java / Perl / Ruby]
AtCoder Beginner Contest 169 B Problème Explication "Multiplication 2" (Python3, C ++, Java)