@78orange

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

Python簡易的なスクリプト

解決したいこと

友達にPython教えて貰っているのですが、スクリプト作成に困っています。
①自然数nを入力すると、n以下の自然数の組(x.y.z)が2x^2+3y^2=5z^2を満たす全ての組を出力する。また、組み合わせ数も出力する。

03326323-3548-4C7F-8720-7E09E753BCD2.jpeg

93BA02D6-6E1C-4513-B39A-80C8B8B36217.jpeg

該当するソースコード

Python

自分で試したこと

本を買って考えてみたのですが、いまいち分かりませんでした。

0 likes

2Answer

数学に詳しくないので①についてのみ考えてみました。

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関数などわからなければググれば情報が見つかると思います。

0Like

プログラミング初心者の方とお見受けします。
自分で考えるのが良いかと思いますが、今回は模範解答を載せてしまいます。
勉強法として以下のソースコードを改造して遊んでみるのをお勧めします。

②の解答

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}")
0Like

Your answer might help someone💌