[codeup] 2055. 2つの数の約数を求めます
質問する
2つの整数a,bの約数を出力するプログラムを作成してください.
入力
2つの整数a,bを入力します.(1 <= a <= b <= 1,000,000,000)
しゅつりょく
2つの整数a,bの約数は昇順に出力される.
△重複した薬液は1回のみ出力される.
入力例
6 14
出力例
1 2 3 6 7 14
実行コード
このコードを初めて作成する場合、テスト入出力に特別な事項がないため、答えを提出しましたが、タイムアウトしました.
a,b = map(int,input().split(" "))
def get_divisor(number):
numbers = []
for i in range(1,number+1):
if number % i == 0:
numbers.append(i)
return numbers
def delete_duplication(a,b):
result = []
result = get_divisor(a) + get_divisor(b)
result = list(set(result))
result.sort()
return result
temp = delete_duplication(a,b)
print(' '.join(map(str,temp)))
タイムアウトの問題は、毎日のクエリの部分によって発生する可能性がありますが、これは私の知っている知識ラインでどのように解決しますか?薬水を探す様々な方法の中で、より速く薬水を見つける方法が見つかった.
ヒントは「平方根」
「すべての合成数は、その平方根以下です.」
ある大きな数を分解する場合、その平方根で除算する必要はありません.
この部分は時間短縮の大きな手がかりとなっている.
例えば、8のミネラルウォーターを探すとしたら、
8=[1,2,4,8]
i*iは8を超える
1 X 1 = 1
2 X 2=4:ここまで計算します.
3 X 3 = 9
すなわち,iは1,2になり,n/iは8,4になる.
これにより4つの薬水を得ることが可能となった.
これをコードに適用します.
import math
a,b = map(int,input().split(" "))
def get_divisor(number):
num = 0
num = math.sqrt(number)
numbers = []
for i in range(1,int(num)+1):
if number % i == 0:
numbers.append(i)
numbers.append(number//i)
return numbers
def delete_duplication(a,b):
result = []
result = get_divisor(a) + get_divisor(b)
result = list(set(result))
result.sort()
return result
temp = delete_duplication(a,b)
print(' '.join(map(str,temp)))
あまり変わっていませんが、def get divisorセクションにnumという変数を追加し、numberの平方根を加えて、その範囲の値を求めて除算します.このようにして行って、薬水のタイムアウトを求めて解決します!!
Reference
この問題について([codeup] 2055. 2つの数の約数を求めます), 我々は、より多くの情報をここで見つけました https://velog.io/@woonmong/codeUp-2055.-두-수의-약수-구하기テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol