juliaで素数を生成する1次式を求める!
はじめに
元々は次のツイートの問題が発端です。東北大学の入試問題のようです。
この問題について,次のように解けるのではないかと思い,次のようにリツイートしました。
ということで,
『素数
と思いました。『まあ,なさそうかな?』というのがツイッター界隈のコメントでした。
授業での生徒の発見!
そんなことを授業で話していたら,生徒が,
という関数を持ってきました。最初は『???』と思ったのですが,調べてみると
f(2)=13
f(3)=19
f(5)=31
f(7)=43
f(11)=67
f(13)=79
f(17)=103
と
ツイッターみると,この辺りのことに関心のある方もいてやりとりをしました。
その先を調べてみたい!
ということで,f(2)~f(19)まで素数になるような
For[a=1,a<10000000,a++,n=1;
While[PrimeQ[f[Prime[n]]],n++];
If[n>7,Print["f(x)=",2a,"x+1,","n=",n-1]]]
まあ,この辺りが,Wolfram Cloud無料版の限界で,f(23)まで素数のものを探そうとするとtimeoutでした。
JuliaのPrimes.jlパッケージ
ということで,最後にJuliaでやってみました。Primes.jlが良さそうです。
まずはパッケージを読み込んで
import Pkg; Pkg.add("Primes")
using Primes
その後,調べます。
for i=1:1000000000
n=1
while isprime(2*i*prime(n)+1)
n+=1
end
if n>9
println("f(x)=",2*i,"x+1,","n=",n-1)
end
end
f(x)=437286240x+1,n=9
f(x)=861211560x+1,n=9
InterruptException:
途中で,切れてしまいましたが,2つ見つかりました。時間はは買っていないのですが,見つかるまで数分だと思います。
n=1
while isprime(437286240*prime(n)+1)
println("f(",prime(n),")=",437286240*prime(n)+1)
n+=1
end
f(2)=874572481
f(3)=1311858721
f(5)=2186431201
f(7)=3061003681
f(11)=4810148641
f(13)=5684721121
f(17)=7433866081
f(19)=8308438561
f(23)=10057583521
です。
Discussion