くろたんく雑記帳

日常とか、わんちゃんとか、機械学習とか、競プロとか、

MENU

Python3で解く AtCoder Beginner Contest 180 C - Cream puff

問題の意図的に約数を列挙すればいい。

目次

概要

問題

  1. {\displaystyle n}が与えられる。
  2. {\displaystyle n \div i} とした時に割り切れる{\displaystyle i} を全て列挙できる?

解くときに考えた内容

  • 文意から、約数列挙するだけ。
  • 約数列挙は手元に関数があるので、それの復習。
  • 検索範囲は{\displaystyle 1}から{\displaystyle \sqrt{n}}以下
  • {\displaystyle n}{\displaystyle i}で割り切れたら、lowerに加える。
  • 割った結果が{\displaystyle i}と異なる場合はupperに加える。
  • intでほしいので演算子は//
  • 最後にリストを合体させる。(一応順番にするためにupperを逆順にしてる)
    • 出力が行だから、アンパックして改行。

コード

def divisors(n):
    lower, upper = [], []
    i = 1
    while i*i <= n:
        if n % i == 0:
            lower.append(i)
            if i != n // i:
                upper.append(n//i)
        i += 1
    return lower + upper[::-1]
n = int(input())
ans = divisors(n)
print(*ans, end='\n')

参考になる書籍

けんちょんさんこと、大槻さんの書籍である、「問題解決力を鍛える!アルゴリズムとデータ構造」 ご本人の記事の中で難易度は、螺旋本ということで初学者でも非常に結構読みやすい!!!(実際に、けんちょんさんの記事はC++に疎い自分でも、その思考プロセスを学べるくらい丁寧に書かれているし、この書籍も非常に読みやすい)どのようなステータスの人にもおすすめの一冊になっている。

とうとう発売され自分の手元にも来た(2020-10-03)。現在読み中なのである程度読み込んだら感想を書く予定。めっちゃ図が多いし、章末問題もあるしかなりイケてる。答えはC++で書かれているがそのうちPythonでも書かれるとのことなので、自分で前もってやってしまおうと思う(答え合わせできるのはありがたい)。

問題解決力を鍛える!アルゴリズムとデータ構造 (KS情報科学専門書)

問題解決力を鍛える!アルゴリズムとデータ構造 (KS情報科学専門書)

  • 作者:大槻 兼資
  • 発売日: 2020/10/02
  • メディア: 単行本(ソフトカバー)

章末問題を解いてる。まだ途中。 blacktanktop.hatenablog.com