import numpy as np
#ガウス=ルジャンドルのアルゴリズム。N回繰り返す
def GaussRegendre(N):
#初項
a = 1.0
b = np.sqrt(2) / 2
t = 1 / 4
p = 1
for i in range(N): #iが0からN-1までの間以下を繰り返す
#漸化式に従い、次の項を計算
a_new = (a + b) / 2
b_new = np.sqrt(a * b)
t_new = t - p * (a - a_new)**2
p_new = 2 * p
#古い値を新しい値に置き換え
a = a_new
b = b_new
t = t_new
p = p_new
pi = (a + b)**2 / (4 * t) #円周率の計算
return pi
#出力
print("GaussRegendre(1) = " + str(GaussRegendre(1)))
print("GaussRegendre(2) = " + str(GaussRegendre(2)))
print("GaussRegendre(3) = " + str(GaussRegendre(3)))
aW1wb3J0IG51bXB5IGFzIG5wCgoj44Ks44Km44K5PeODq+OCuOODo+ODs+ODieODq+OBruOCouODq+OCtOODquOCuuODoOOAgk7lm57nubDjgorov5TjgZkKZGVmIEdhdXNzUmVnZW5kcmUoTik6CiAgICAj5Yid6aCFCiAgICBhID0gMS4wCiAgICBiID0gbnAuc3FydCgyKSAvIDIKICAgIHQgPSAxIC8gNAogICAgcCA9IDEKCiAgICBmb3IgaSBpbiByYW5nZShOKTogI2njgYww44GL44KJTi0x44G+44Gn44Gu6ZaT5Lul5LiL44KS57mw44KK6L+U44GZCiAgICAgICAgI+a8uOWMluW8j+OBq+W+k+OBhOOAgeasoeOBrumgheOCkuioiOeulwogICAgICAgIGFfbmV3ID0gKGEgKyBiKSAvIDIKICAgICAgICBiX25ldyA9IG5wLnNxcnQoYSAqIGIpCiAgICAgICAgdF9uZXcgPSB0IC0gcCAqIChhIC0gYV9uZXcpKioyCiAgICAgICAgcF9uZXcgPSAyICogcAoKICAgICAgICAj5Y+k44GE5YCk44KS5paw44GX44GE5YCk44Gr572u44GN5o+b44GICiAgICAgICAgYSA9IGFfbmV3CiAgICAgICAgYiA9IGJfbmV3CiAgICAgICAgdCA9IHRfbmV3CiAgICAgICAgcCA9IHBfbmV3CgogICAgcGkgPSAoYSArIGIpKioyIC8gKDQgKiB0KSAj5YaG5ZGo546H44Gu6KiI566XCiAgICByZXR1cm4gcGkKCiPlh7rlipsKcHJpbnQoIkdhdXNzUmVnZW5kcmUoMSkgPSAiICsgc3RyKEdhdXNzUmVnZW5kcmUoMSkpKQpwcmludCgiR2F1c3NSZWdlbmRyZSgyKSA9ICIgKyBzdHIoR2F1c3NSZWdlbmRyZSgyKSkpCnByaW50KCJHYXVzc1JlZ2VuZHJlKDMpID0gIiArIHN0cihHYXVzc1JlZ2VuZHJlKDMpKSk=