結果
問題 | No.313 π |
ユーザー |
|
提出日時 | 2015-12-06 16:26:36 |
言語 | PyPy2 (7.3.15) |
結果 |
AC
|
実行時間 | 1,384 ms / 5,000 ms |
コード長 | 1,865 bytes |
コンパイル時間 | 1,482 ms |
コンパイル使用メモリ | 77,192 KB |
実行使用メモリ | 130,704 KB |
最終ジャッジ日時 | 2024-09-14 15:51:41 |
合計ジャッジ時間 | 51,492 ms |
ジャッジサーバーID (参考情報) |
judge5 / judge6 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 2 |
other | AC * 32 |
ソースコード
#!/usr/bin/python# -*- coding: utf-8 -*-# †from collections import namedtuplefrom math import log10Tup = namedtuple('Tup', 'p, q, t')#def isqrt(n):# if n < 0:# raise ValueError('square root not defined for negative numbers')# if n == 0:# return 0# a, b = divmod(n.bit_length(), 2)# x = 1<<(a+b)# while True:# y = (x + n//x)//2# if y >= x:# return x# x = ydef newtonsqrt(q, n, init):x, m, c3 = init, 0, 3c3 <<= nwhile m != x:m = xx *= c3 - ((m * m * q) >> n)x >>= n + 1return xdef isqrt(s):n = s.bit_length()b = 8192if n & 1:b += 1x = 1<<(b/2)m = n / 6while 1:w = s >> (n-b)x = newtonsqrt(w, b, x)y = 2 * mif b + y > n:breakb += yx <<= mx <<= (n-b) / 2x = newtonsqrt(s, n, x) * s >> nreturn xdef pi_chudnovsky_bs(digits):C = 640320C3_OVER_24 = C**3 // 24def bs(a, b):if b - a == 1:if a == 0:p = q = 1else:p = (6*a-5)*(2*a-1)*(6*a-1)q = a*a*a*C3_OVER_24t = p * (a*545140134 + 13591409)if a & 1:t = -telse:m = (a + b) // 2am = bs(a, m)mb = bs(m, b)p = am.p * mb.pq = am.q * mb.qt = mb.q * am.t + am.p * mb.treturn Tup(p, q, t)DIGITS_PER_TERM = log10(C3_OVER_24/6/2/6)n = int(digits/DIGITS_PER_TERM + 1)_, Q, T = bs(0, n)sq = isqrt(10005 * 10**(2*digits))return (Q*426880*sq) // TN = 200000res = str(pi_chudnovsky_bs(N))S = raw_input().replace('.', '')for i in xrange(N, -1, -1):if S[i] != res[i]:print S[i], res[i]break