裏 RjpWiki

Julia ときどき R, Python によるコンピュータプログラム,コンピュータ・サイエンス,統計学

Julia に翻訳--208 素数判定,素因子分解,約数

2021年04月29日 | ブログラミング

#==========
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]

コメント    この記事についてブログを書く
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする
« Julia に翻訳--207 フィボナ... | トップ | Julia に翻訳--209 一般化固... »
最新の画像もっと見る

コメントを投稿

ブログラミング」カテゴリの最新記事