Python 練習例3
問題:ある整数は、100を加えると完全平方数になり、さらに168を加えても完全平方数になります。この数はいくつでしょうか?
プログラム分析:
その数を x と仮定します。
1、すると:x + 100 = n2, x + 100 + 168 = m2
2、等式を計算:m2 - n2 = (m + n)(m - n) = 168
3、設定:m + n = i、m - n = j、i * j =168、i と j の少なくとも一方は偶数
4、得られる:m = (i + j) / 2、n = (i - j) / 2、i と j はどちらも偶数か、どちらも奇数かのいずれか。
5、3 と 4 から導くと、i と j はどちらも 2 以上の偶数であることがわかる。
6、i * j = 168、j>=2 なので、1 < i < 168 / 2 + 1。
7、次に i のすべての値をループして計算すればよい。
プログラムソースコード:
例(Python 3.0+)
# 求解関数を定義
def find_integer():
for i in range(2, 85): # i の範囲は 2 から 84
if 168 % i == 0: # i は 168 の約数
j = 168 // i # 対応する j を計算
if i > j and (i + j) % 2 == 0 and (i - j) % 2 == 0: # i と j が両方偶数または両方奇数であることを確認
m = (i + j) // 2
n = (i - j) // 2
x = n * n - 100
print(f"x: {x}, m: {m}, n: {n}")
# 求解関数を呼び出す
find_integer()
def find_integer():
for i in range(2, 85): # i の範囲は 2 から 84
if 168 % i == 0: # i は 168 の約数
j = 168 // i # 対応する j を計算
if i > j and (i + j) % 2 == 0 and (i - j) % 2 == 0: # i と j が両方偶数または両方奇数であることを確認
m = (i + j) // 2
n = (i - j) // 2
x = n * n - 100
print(f"x: {x}, m: {m}, n: {n}")
# 求解関数を呼び出す
find_integer()
例(Python 2.0+)
#!/usr/bin/python
# -*- coding: UTF-8 -*-
for i in range(1,85):
if 168 % i == 0:
j = 168 / i;
if i > j and (i + j) % 2 == 0 and (i - j) % 2 == 0 :
m = (i + j) / 2
n = (i - j) / 2
x = n * n - 100
print(x)
# -*- coding: UTF-8 -*-
for i in range(1,85):
if 168 % i == 0:
j = 168 / i;
if i > j and (i + j) % 2 == 0 and (i - j) % 2 == 0 :
m = (i + j) / 2
n = (i - j) / 2
x = n * n - 100
print(x)
上記の例の出力結果は次のとおりです:
-99 21 261 1581その他の拡張