Skip to content

Instantly share code, notes, and snippets.

@aymkx
Last active December 21, 2017 13:06
Show Gist options
  • Save aymkx/59e81527d98b9233f8a96aee6051348e to your computer and use it in GitHub Desktop.
Save aymkx/59e81527d98b9233f8a96aee6051348e to your computer and use it in GitHub Desktop.
Pythonに翻訳しただけ
import random, time, subprocess
def powmod(base, exp, mod):
buf = 1
for i in range(exp.bit_length() - 1, -1, -1):
buf = ((buf ** 2) * (base ** ((exp >> i) & 1))) % mod
return buf
def is_miller_rabin_prime(num, trial):
if ((num & 1) ^ 1) or (num < 3): return False
odd_factor, exp = num - 1, 0
while (odd_factor & 1) ^ 1:
exp += 1
odd_factor >>= 1
random.seed()
for _ in range(trial):
witness = random.randrange(2,num)
m = powmod(witness, odd_factor, num)
if m == 1: return True
for _ in range(exp):
if m == num - 1: return True
m = (m ** 2) % num
return False
def generate_primenumber(length = 1024, miller_rabin_trial = 4):
rand_max = 1 << (length - 2)
prime = 0
random.seed()
while not is_miller_rabin_prime(prime, miller_rabin_trial):
prime = ((random.randrange(rand_max) + rand_max) << 1) + 1
return prime
def main():
t = time.time()
prime = hex(generate_primenumber())[2:]
t = time.time() - t
print(prime, "\n\ngenerating time: " + str(t) + "[s]\n", sep="")
subprocess.run("echo " + prime + "| clip", shell=True)
subprocess.run("pause", shell=True)
if __name__ == "__main__":
main()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment