Mac OS Catalina, バージョン 10.15.7 で gmp 0.6−2 が動かない。爆弾(エラー)が出る。
いろいろ探して,
M1チップ搭載のMacだとRのgmpパッケージが動かない?
https://rion778.hatenablog.com/entry/2021/03/02/214104
に,
install.packages("gmp", type = "source")
とすればよいと書いてあった。
私のマシンはポンコツなので,M1 なんかでないけど,とにかくやってみたら,動くようになった。
やってみたかったのは,R での Pell's equation プログラムを確かめることだ。
Pell's equation
https://rosettacode.org/wiki/Pell%27s_equation
ここには,いろいろな言語で書かれた,ペル方程式の解を求めるプログラムがのっているが,R によるプログラムがないので,以下のように翻訳してみた。
a, b = b, c みたいな構文がないのでちょっとダサいプログラムになる。
library(gmp)
pell = function(n) {
x = as.bigz(floor(sqrt(n)))
y = x
z = 1
r = 2 * x
e1 = 1
e2 = 0
f1 = 0
f2 = 1
while(TRUE) {
y = r * z - y
z = (n - y * y) %/% z
r = (x + y) %/% z
temp = e1
e1 = e2
e2 = e2 * r + temp
temp = f1
f1 = f2
f2 = f2 * r + temp
a = f2
b = e2
temp = b
b = a
a = a * x + temp
if (a * a - n * b * b == 1) {
return(c(a, b))
}
}
}
pell(61)
# Big Integer ('bigz') object of length 2:
# [1] 1766319049 226153980
as.bigz("1766319049")^2 - 61 * as.bigz("226153980")^2
# 1
pell(109)
# Big Integer ('bigz') object of length 2:
# [1] 158070671986249 15140424455100
pell(181)
# Big Integer ('bigz') object of length 2:
# [1] 2469645423824185801 183567298683461940
pell(277)
# Big Integer ('bigz') object of length 2:
# [1] 159150073798980475849 9562401173878027020
無事に動いているようだ。