私はPythonコーディングの初心者です。私はユーザーから2つの数字AとBを持っています。Pythonの2つの数値のANDingの最大値を求める
私の問題は、私はこのために今2つのソリューションを持っている最大(PとQ) < = P < Q < = B
を見つけることです。
解決方法1:#すべての組み合わせでANDingするこの方法は、組み合わせが少ない場合に機能します。値を大きくすると、エラーを超えるメモリがスローされます。
given = raw_input()
n= list(map(int,given.split()))
A = n[0]
B = n[1]
newlist = range(B+1)
# print newlist
# Finding all combinations
comb = list(itertools.combinations(newlist,2))
# print comb
# ANDing
l = []
for i in com:
x = i[0] & i[1]
l.append(x)
# print l
print max(l)
溶液2:多くの入力出力を観察した後、場合B ==奇数、MAX(値)= B-1およびBのための==でも、MAX(値)= B-2。
given = raw_input()
n= list(map(int,given.split()))
A = n[0]
B = n[1]
if B % 2 == 0:
print (B - 2)
else:
print (B -1)
問題文によれば、私は解決策2にANDingを使用していません。まだ正しい出力が得られています。
しかし、私ははるかに簡単でPythonicロジックを探しています。これを解決する他の方法/ロジックはありますか?
いいえ、あなたはループを反復しています。 A = 7893552、B = 789000000の場合は試してみてください。 A、Bに対する私の制約は10^18です。あなたがB = 10^18の場合に起こることを想像することができます。 –
@ Shivkumarあなたは 'より高い値'が10^18と同じくらい大きいかもしれないと言及しませんでした。さらに、答えのリストの理解は 'itertools.combinations'よりもまだ速いです。 – Mohammad