考えて競プロする

プログラミングコンテストの問題をどう考えて解いたかを記録していくブログです。使用言語はPython3

ABC120-B - K-th Common Divisor を解く

ABC120-B - K-th Common Divisor

 

AもBも割り切れる数のうち、K番目の大きさのものを出力する問題

1から順に割れる数を挙げていって、K番目の約数が見つかったら

出力すればいい

 

以上を踏まえて書いたコードを以下に示す

 

提出したコード

# 入力
A,B,K=map(int,input().split())

# カウンタ(何番目に大きいか?)
c=0

for i in range(1,min(A,B)+1):
  if A%i==0 and B%i==0:
    c+=1

  # K番目に大きい割り切れる数が出たら終了
  if c==K:
    print(i)
    exit()
 

提出結果はWAでした。 …なんで?

問題文をもう一度読んでみる

 

> AもBも割り切る正整数のうち、K番目に大きいものを求めてください。

 

うーん、どうやら誤読していたっぽい

上記のコードは、小さい方からK番目に大きい数字を挙げていたが

この問題は大きい方からK番目に大きい数字を挙げる必要があるらしい

 

仕方ないので、AとBを割り切れる数を全て列挙して

大きい方からK番目の数を出力するコードに書き換えることにする

 

再提出したコード

# 入力
A,B,K=map(int,input().split())

# 割り切れた数を保存するリスト
l=[]

for i in range(1,min(A,B)+1):
  if A%i==0 and B%i==0:
    l.append(i)

# 出力
print(l[-K])

 

提出結果はACでした

いやー 誤読って怖いなあ