Pythonで解が1つしかない線形方程式の係数を見つけるプログラム
値nがあるとすると、方程式a * x + b * y =nが少なくとも1つの解を持つように存在するペア(a、b)[a
したがって、入力がn =4の場合、有効なペアは(1、2)と(1、3)であるため、出力は2になります。
これを解決するには、次の手順に従います-
- 関数divisors_gen()を定義します。これにはnがかかります
- divs:=サイズn+1のリストのリスト。そして、各内部リストは1を保持しています
- divs [0]:=1つの要素0のみを含むリスト
- 2からnの範囲のiについては、
- 範囲1から(n / i)+ 1のフロアまでのjの場合、実行
- リストの最後のインデックス[i*j] にiを挿入します
- 範囲1から(n / i)+ 1のフロアまでのjの場合、実行
- divを返しますが、すべての内部リストを逆にします
- メインの方法から、次の手順を実行します-
- 結果:=0
- d_cache:=divisors_gen(n + 1)
- 1からn-1の範囲のaについては、
- i:=1
- s:=新しいセット
- a * i
- b:=n-a * i
- d_cache [b]の各dについて、実行します
- d> aの場合、
- dがsにない場合は、
- 結果:=結果+1
- dがsにない場合は、
- それ以外の場合、
- ループから抜け出す
- dをセットに挿入します
- i:=i + 1
例
理解を深めるために、次の実装を見てみましょう-
def divisors_gen(n): divs = [[1] for x in range(0, n + 1)] divs[0] = [0] for i in range(2, n + 1): for j in range(1, n // i + 1): divs[i * j].append(i) return [i[::-1] for i in divs] def solve(n): result = 0 d_cache = divisors_gen(n+1) for a in range(1, n): i = 1 s = set([]) while a*i < n: b = n - a*i for d in d_cache[b]: if d > a: if d not in s: result += 1 else: break s.add(d) i += 1 return result n = 4 print(solve(n))
入力
4
出力
2
-
Pythonを使用して同じxまたはy座標を持つ最も近い点を見つけるプログラム
ptsと呼ばれる配列で与えられたポイントのセットがあると仮定します。現在の場所である別のポイント(x、y)もあります。有効なポイントを、現在のポイントと同じx座標または同じy座標を共有するポイントとして定義しています。現在の場所(x、y)からマンハッタン距離が最小の有効なポイントのインデックスを返す必要があります。複数のポイントがある場合は、インデックスが最小の有効なポイントを返します。 (注:2点(a、b)と(p、q)の間のマンハッタン距離は| a --p | + | b--q|です。 したがって、入力がpts =[(1,2)、(3,1)、(3,4)、(2,3)、(4,4)] pt =(2
-
Pythonで1つのスワップで辞書式に最小の文字列を見つけるプログラム
文字列sがあるとすると、指定された文字列sの2つの文字間で最大1つのスワップを実行できる場合に、辞書式順序で最小の文字列を見つける必要があります。 したがって、入力が「zyzx」のような場合、出力は「xyzz」になります これを解決するには、次の手順に従います- temp:=サイズsの配列で、0で埋めます m:=sのサイズ-1 s -1から-1の範囲サイズのiの場合、1ずつ減らします。 s [i]