結果
| 問題 |
No.2271 平方根の13桁精度近似計算
|
| コンテスト | |
| ユーザー |
👑 |
| 提出日時 | 2023-04-09 15:35:15 |
| 言語 | Python3 (3.13.1 + numpy 2.2.1 + scipy 1.14.1) |
| 結果 |
AC
|
| 実行時間 | 34 ms / 2,000 ms |
| コード長 | 571 bytes |
| コンパイル時間 | 257 ms |
| コンパイル使用メモリ | 12,672 KB |
| 実行使用メモリ | 10,880 KB |
| 最終ジャッジ日時 | 2024-10-04 17:58:05 |
| 合計ジャッジ時間 | 2,986 ms |
|
ジャッジサーバーID (参考情報) |
judge2 / judge1 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 40 |
ソースコード
N=int(input())
B=1220703125
if N == 0:
print(0)
exit(0)
elif N < 0:N+=B
E=int(input())
V=0
while N%5==0:
N//=5
V+=1
if V>=E:
print(0)
exit(0)
elif V%2==1:
print("NaN")
exit(0)
R=N%5
if R==2 or R==3:
print("NaN")
exit(0)
V//=2
Q=pow(5,E-V)
i=[0]*18
for n in range(18):i[n]=pow(n if n%5!=0 else n//5,4*B//5-1,B)
N=(N*i[R]-1)%Q
r=u=p=f=q=1
for d in range(1,18):
u*=N
u%=Q
p*=i[2]+1-d
p%=Q
f*=i[d]
f%=Q
if d%5==0:q*=5
r+=p*f*u//q
r%=Q
if R!=1:r*=2
r*=pow(5,V)
r%=Q
b=1<<29
if r<=b:
print(r)
exit(0)
r=Q*pow(5,V)-r
if r<=b:
print(r)
exit(0)
print("NaN")