#==========
Julia の修行をするときに,いろいろなプログラムを書き換えるのは有効な方法だ。
以下のプログラムを Julia に翻訳してみる。
素数判定,素因子分解,約数
http://aoki2.si.gunma-u.ac.jp/R/divisor.html
ファイル名: primes.jl
既存の関数名: factor, prodfactors, primes, nextprime, prevprime,
isprime, ismersenneprime。gcd
翻訳するときに書いたメモ
==========#
using Primes
# 素因数分解の表示法 1
factor(100) # 2^2 * 5^2
# 素因数分解の表示法 2
using DataStructures
factor(DataStructures.SortedDict, 100) # SortedDict(Dict(2 =>2, 5 => 2))
# 素因数分解の結果の表示法 3
factor(Vector, 100) # [2, 2, 5, 5]
# 素因数だけの表示
factor(Set, 100) # [5, 2]
# 素因数分解から元の数を計算
Base.prod([2^2, 5^2]) # 100
prodfactors([2^2, 5^2]) # 100
# 指定範囲中の素数
primes(2, 20) # [2, 3, 5, 7, 11, 13, 17, 19]
primes(5) # [2, 3, 5]
# 次の素数
nextprime(1000) # 1009
nextprime(10000000000) # 10000000019
factor(10000000019) # 10000000019
gcd(nextprime(10000000000), 2) # 1
factor(nextprime(10000000000)-1) # 2 * 131 * 521 * 73259
# 最大公約数
gcd(nextprime(10000000000)-1, 73259) # 73259
# 前の素数
nextprime(10000000000) # 10000000019
prevprime(10000000018) # 9999999967
nextprime(9999999968) # 10000000019
# n 番目の素数
[prime(i) for i = 1:10] # [2, 3, 5, 7, 11, 13, 17, 19, 23, 29]
# 素数判定
isprime(5) # true
isprime(10000000019) # true
isprime(10000000018) # fase
# メルセンス素数
ismersenneprime(2^11 - 1) # false
isprime(2^11 - 1) # false
factor(2^11 - 1) # 23 * 89
2^11 - 1 # 2047
23 * 89 # 2047
ismersenneprime(2^13 - 1) # true
2^13 - 1 # 8191
factor(2^13 - 1) # 8191
# 素数マスク
mask = primesmask(20) # [0,1,1,0,1,0,1,0,0,0,1,0,1,0,0,0,1,0,1,0]
(1:20)[mask] # [2, 3, 5, 7, 11, 13, 17, 19]
(1:20)[Vector{Bool}([0,1,1,0,1,0,1,0,0,0,1,0,1,0,0,0,1,0,1,0])] # [2, 3, 5, 7, 11, 13, 17, 19]
※コメント投稿者のブログIDはブログ作成者のみに通知されます