2016 Update
This commit is contained in:
parent
948b86eafa
commit
dcf5d15da3
7965 changed files with 139854 additions and 31002 deletions
|
|
@ -1,16 +1,10 @@
|
|||
require 'rational' # for lcm
|
||||
require 'mathn' # for prime_division
|
||||
require 'prime'
|
||||
|
||||
def powerMod(b, p, m)
|
||||
result = 1
|
||||
bits = p.to_s(2)
|
||||
for bit in bits.split('')
|
||||
p.to_s(2).each_char.inject(1) do |result, bit|
|
||||
result = (result * result) % m
|
||||
if bit == '1'
|
||||
result = (result * b) % m
|
||||
end
|
||||
bit=='1' ? (result * b) % m : result
|
||||
end
|
||||
result
|
||||
end
|
||||
|
||||
def multOrder_(a, p, k)
|
||||
|
|
@ -18,7 +12,7 @@ def multOrder_(a, p, k)
|
|||
t = (p - 1) * p ** (k - 1)
|
||||
r = 1
|
||||
for q, e in t.prime_division
|
||||
x = powerMod(a, t / q ** e, pk)
|
||||
x = powerMod(a, t / q**e, pk)
|
||||
while x != 1
|
||||
r *= q
|
||||
x = powerMod(x, q, pk)
|
||||
|
|
@ -28,15 +22,15 @@ def multOrder_(a, p, k)
|
|||
end
|
||||
|
||||
def multOrder(a, m)
|
||||
m.prime_division.inject(1) {|result, f|
|
||||
m.prime_division.inject(1) do |result, f|
|
||||
result.lcm(multOrder_(a, *f))
|
||||
}
|
||||
end
|
||||
end
|
||||
|
||||
puts multOrder(37, 1000) # 100
|
||||
puts multOrder(37, 1000)
|
||||
b = 10**20-1
|
||||
puts multOrder(2, b) # 3748806900
|
||||
puts multOrder(17,b) # 1499522760
|
||||
puts multOrder(2, b)
|
||||
puts multOrder(17,b)
|
||||
b = 100001
|
||||
puts multOrder(54,b)
|
||||
puts powerMod(54, multOrder(54,b), b)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue