[programmers/CodingTest/Python]最大公倍数と最小公倍数
3987 ワード
問題の説明
2つの数を入力し、2つの数の最大公約数と最小公約数の関数を返し、解を完了します.アレイの先頭にある最大公約数、次に最小公約数を返します.例えば、2つの数3および12の最大承諾数は3であり、最小公倍数は12であるため、ソリューション(3、12)は[3、12]を返さなければならない.
せいげんじょうけん
2つの数は1以上1000000以下の自然数です.
I/O例
n m return
3 12 [3, 12]
2 5 [1, 10]
I/O例説明
I/O例#1
上記のように.
I/O例#2
自然数2と5の最大承諾数が1であり、最小公倍数が10であるため、[1,10]を返さなければならない.
方法
2つの数に分けられる数の全部分.このとき、除算数は一時配列に格納されます.最大公倍数は一時配列のすべての数を乗じて得られ、最小公倍数は一時配列の数の積を乗じて得られる.
最小公倍数が1の場合、分割はできません.したがって、一時配列は空の配列として保持されます.したがって、一時配列には、乗算に影響しない数の1が挿入されます.
n m return
3 12 [3, 12]
2 5 [1, 10]
2つの数に分けられる数の全部分.このとき、除算数は一時配列に格納されます.最大公倍数は一時配列のすべての数を乗じて得られ、最小公倍数は一時配列の数の積を乗じて得られる.
最小公倍数が1の場合、分割はできません.したがって、一時配列は空の配列として保持されます.したがって、一時配列には、乗算に影響しない数の1が挿入されます.
->curが1増加します.
->nの場合、mはcurで除算され、
-->tmpにcurを加えます.
-->n,mはcurで割った値に更新される.
-->curを1に更新します.
->離れなければ、次の繰り返しを行います.
->gcdにiを乗算します.
solution.py def solution(n, m):
tmp=[1]
cur=1
while n>1 and m>1 and cur<=min(n, m):
cur+=1
if n%cur==0 and m%cur==0:
tmp.append(cur)
n, m=n//cur, m//cur
cur=1
else:
continue
gcd, lcm=1, 1
for i in tmp:
gcd*=i
lcm=n*m*gcd
answer=[gcd, lcm]
return answer
Reference
この問題について([programmers/CodingTest/Python]最大公倍数と最小公倍数), 我々は、より多くの情報をここで見つけました
https://velog.io/@xx0hn/Programmers-CodingTest-Python-최대공약수와-최소공배수
テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol
def solution(n, m):
tmp=[1]
cur=1
while n>1 and m>1 and cur<=min(n, m):
cur+=1
if n%cur==0 and m%cur==0:
tmp.append(cur)
n, m=n//cur, m//cur
cur=1
else:
continue
gcd, lcm=1, 1
for i in tmp:
gcd*=i
lcm=n*m*gcd
answer=[gcd, lcm]
return answer
Reference
この問題について([programmers/CodingTest/Python]最大公倍数と最小公倍数), 我々は、より多くの情報をここで見つけました https://velog.io/@xx0hn/Programmers-CodingTest-Python-최대공약수와-최소공배수テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol