Python簡易的なスクリプト
解決したいこと
友達にPython教えて貰っているのですが、スクリプト作成に困っています。
①自然数nを入力すると、n以下の自然数の組(x.y.z)が2x^2+3y^2=5z^2を満たす全ての組を出力する。また、組み合わせ数も出力する。
②
③
該当するソースコード
Python
自分で試したこと
本を買って考えてみたのですが、いまいち分かりませんでした。
0 likes
友達にPython教えて貰っているのですが、スクリプト作成に困っています。
①自然数nを入力すると、n以下の自然数の組(x.y.z)が2x^2+3y^2=5z^2を満たす全ての組を出力する。また、組み合わせ数も出力する。
②
③
Python
本を買って考えてみたのですが、いまいち分かりませんでした。
数学に詳しくないので①についてのみ考えてみました。
def calc(n):
ans = []
for x in range(1, n+1):
for y in range(1, n+1):
for z in range(1, n+1):
if 2*x**2 + 3*y**2 == 5*z**2:
ans.append((x, y, z))
return ans
result = calc(10)
print(result, len(result))
def calc2(n):
return [(x, y, z) for x in range(1, n+1) for y in range(1, n+1) for z in range(1, n+1) if 2*x**2 + 3*y**2 == 5*z**2]
result2 = calc2(10)
print(result2, len(result2))
calcとcalc2は書き方が違うだけです。
range
関数などわからなければググれば情報が見つかると思います。
プログラミング初心者の方とお見受けします。
自分で考えるのが良いかと思いますが、今回は模範解答を載せてしまいます。
勉強法として以下のソースコードを改造して遊んでみるのをお勧めします。
②の解答
import math
# Maclaurin's expansion
def exp_me(n, x):
rslt = 1.0
for i in range(1, n + 1):
rslt += x ** i / math.factorial(i)
return rslt
for n in range(1, 16):
print(f"{n:02} : exp(1) = {exp_me(n, 1)}")
③の解答
import math
# ここは標準入力する形にしてもよいです。
a = 1.0
N = 15
s = 0
smax = -1e10
kmax = None
for k in range(1, N + 1):
s += math.sin(a * k)
if smax < s:
smax = s
kmax = k
print(f"smax = {smax}")
print(f"kmax = {kmax}")