```python
%matplotlib inline
from IPython.display import display,Math
from sympy import *
init_session()
```


```python
%%time
# 平方根の第k位まで
p = 2
k = 2
q = 0
while ( q**2 <= p*(10**(2*k)) ):
    q = q+1

# 第k桁まで r*(10**k)
if q**2 == p*(10**(2*k)):
    r = q
else:
    r = q-1
print("{0:d} の平方根の小数第{1:d}位までは {2:.{digits}f}".format(p,k,r*(10**(-k)),digits=k))

```


```python
%%time
# 平方根の第k位まで(変数追加による改良)
p = 2
k = 2
q = 0
pk = p * (10**(2*k)) # 繰り返し使うので変数として設定
while ( q**2 <= pk ):
    q = q+1

# 第k桁まで r*(10**k)
if q**2 == pk:
    r = q
else:
    r = q-1
print("{0:d} の平方根の小数第{1:d}位までは {2:.{digits}f}".format(p,k,r*(10**(-k)),digits=k))

```


```python
%%time
# 平方根の第k位まで(和の公式を利用)
p = 2
k = 2
s = 0
q = 0
pk = p*(10**(2*k))
while ( s <= pk ):
    s = s+(2*q+1)
    q = q+1

# 第k桁まで r*(10**k)
if s == p:
    r = q
else:
    r = q-1
print("{0:d} の平方根の小数第{1:d}位までは {2:.{digits}f}".format(p,k,r*(10**(-k)),digits=k))

```


```python
%%time
# 平方根を用いる(ニュートン法)
p = 3
k = 2 # 誤差の精度
e = 10**(-k)  # 誤差
q = p
while ( (q**2-p)/q >= e):
    q = (p+q**2)/(2*q)
print("{0:d} の平方根の誤差{1:.{digits}f}の値は {2:.{digits}f}".format(p,e,q,digits=k))

```


```python
from ipywidgets import interact
from ipywidgets import BoundedIntText
import time
def mynewton(p,k,mstep=10**3):
    e = 10**(-k)
    q = p
    step = 0
    while ( (q**2-p)/q >= e) and (step < mstep):
        q = (p+q**2)/(2*q)
        step += 1
    return q,step
@interact
def _(p=BoundedIntText(value=2,min=1,max=1000,step=1,description="p"),
      k=BoundedIntText(value=1,min=1,max=100,step=1,description="精度")):
    p,k = int(p),int(k)
    q,step = mynewton(p,k)
    return display(Math("$\sqrt{{ {0:d} }}\\fallingdotseq {1:.{digits}f}\\\\ \
        \\text{{{2:d}step(s)}}".format(p,q,step,digits=k)))
```


```python

```

75f9dba66880c837478c4273cbe3c6843e1e1ad8
ipynb
Jupyter Notebook
21jk1-0623.ipynb
ritsumei-aoi/21jk1
2d49628ef8721a507193a58aa1af4b31a60dfd8b
Apache-2.0
21jk1-0623.ipynb
ritsumei-aoi/21jk1
2d49628ef8721a507193a58aa1af4b31a60dfd8b
Apache-2.0
21jk1-0623.ipynb
ritsumei-aoi/21jk1
2d49628ef8721a507193a58aa1af4b31a60dfd8b
Apache-2.0
Qwen/Qwen-72B
1. YES
2. YES