Loading [MathJax]/jax/output/HTML-CSS/jax.js

2019年8月13日火曜日

学習環境

中学数学からはじめる暗号入門 ~現代の暗号はどのようにして作られたのか~ (知りたい!サイエンス 141) (関根 章道(著)、技術評論社))の前編(暗号の歴史あれこれ)、第5章(ユークリッドさん、お母さんを助けて)の暗号を作って解いてみよう - Part 6(素因数分解暗号)の解答を求めてみる。

439022=2·219511126362=2·63181

219511と 63181 の最大公約数を求める。

219511=63181·34+255763181=2557·24+18132557=1813·1+7441813=744·2+325744=325·2+94325=94·3+4394=43·2+843=8·5+38=3·2+23=2·1+12=1·2+0

よって最大公約数は1。

ゆえに、439022と126362の最大公約数は2。

それぞれを2で割った数を素因数分解。

219511=31·7081=31·73·9763181=23·2747=23·41·67

よって問題の2つの数の素因数分解は、

439022=2·31·73·97126362=2·23·41·67

暗号を解読。

akuy、 aims。

並べ替え。 (アナグラム)

yakusima、屋久島。

コード

Python 3

#!/usr/bin/env python3
from sympy import pprint, primerange, primefactors

a = 439022
b = 126362
d = {p: chr(ord("a") + i) for i, p in enumerate(primerange(2, 102))}

anagram = []

for t in [a, b]:
    anagram += [d[p] for p in primefactors(t)]

print(anagram)

入出力結果(Bash、cmd.exe(コマンドプロンプト)、Terminal、Jupyter(IPython))

$ ./sample2.py
['a', 'k', 'u', 'y', 'a', 'i', 'm', 's']
$ 

0 コメント:

コメントを投稿