Integer # pow wird empfohlen, um die Quadratmethode in Ruby wiederholt zu lösen

Einführung

Der Anfang der Dinge

In Ruby gibt es eine dedizierte Methode Integer # pow.

Ich habe es sofort versucht. AtCoder Typical Contest 002 B - n^p mod m

pow.rb


n, m, p = gets.split.map(&:to_i)
puts n.pow(p, m)

zisaku.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 % 2 == 1
    n = n * n % mod
    p >>= 1
  end
  r
end
puts mpow(n, p, m)
Integer#pow Selbst gemachter mpow
Codelänge(Byte) 50 183
Ausführungszeit(ms) 68 62
Erinnerung(KB) 14356 14356

AtCoder Regular Contest 066 C - Lining Up

pow.rb


n = gets.to_i
a = gets.split.map(&:to_i)
h = Hash.new(0)
a.each do |x|
  h[x] += 1
end
f = true
h.each do |k, v|
  if n.odd? && k == 0
    if v != 1
      f = false
      break
    end
  elsif v != 2
    f = false
    break
  end
end
MOD = 1_000_000_007
puts (f ? 2.pow(n / 2, MOD) : 0)
Integer#pow Selbst gemachter mpow
Codelänge(Byte) 305 438
Ausführungszeit(ms) 101 100
Erinnerung(KB) 22676 22488

Acing Programming Contest 2020

pow.rb


n = gets.to_i
x = gets.chomp
xs = x.to_i(2)
xc = x.count('1')
def mpow(n, p, mod)
  return 0 if mod.zero?
  n.pow(p, mod)
end
def popcount(u)
  return 0 if u.zero?
  a = u % u.to_s(2).count('1')
  1 + popcount(a)
end
xsp = mpow(xs, 1, xc + 1)
xsm = mpow(xs, 1, xc - 1)
n.times do |i|
  if x[i] == '0'
    y = xsp + mpow(2, n - i - 1, xc + 1)
    y = mpow(y, 1, xc + 1)
  elsif xc == 1
    puts '0'
    next
  else
    y = xsm - mpow(2, n - i - 1, xc - 1)
    y = mpow(y, 1, xc - 1)
  end
  puts popcount(y) + 1
end
Integer#pow Selbst gemachter mpow
Codelänge(Byte) 541 629
Ausführungszeit(ms) 421 625
Erinnerung(KB) 14704 15392

Alle waren gleich oder besser. Die Ära des Rubins ist angebrochen.

Zusammenfassung

Referenzierte Site instance method Integer#**

Recommended Posts

Integer # pow wird empfohlen, um die Quadratmethode in Ruby wiederholt zu lösen
ABC177 - E in Ruby lösen
Ganzzahlen, die in Ruby 2.4 zu Ganzzahlen zusammengefasst sind
[Ruby] Wofür wird `!!` verwendet?
Mikro-Benchmark für Gleitkommazahlen zur Potenz von ganzen Zahlen in Ruby
[Technischer Hinweis] Was ist "include" in Ruby?
[Anfänger] Verschiedene iterative Verarbeitung für Ruby-Arrays
Tipps zur Behandlung von gRPC-Fehlern in Ruby