【ABC106 B】「105」を解く【Python3】

「AtCoder」解説一覧へ

105のように、「奇数で正の約数が8個」であるものの数を数える問題です。

提出
n = int(input())
ans = 0

for i in range(1,n+1):
    cnt = 0
    if i%2 == 0:
        continue
    for j in range(1,i+1):
        if i%j == 0:
            cnt += 1
    if cnt == 8:
        ans += 1

print(ans)

入力はNのみで、Nは1以上200以下の制約を持ちます。

1からNまでのすべての数字において、その数字が偶数の場合は「continue」で飛ばし、奇数の場合には約数をカウントします。

1から始め、Nで終わらせるため「range(1,n+1)」としています。

二つ目のfor文は、約数を1からiまで調べれば良いため、「range(1,i+1)」となります。

「剰余が0となる=約数」であるため、その時にcntに1を加算します。

iまで調べ終えたとき、cntが8であれば、ansに1を加算します。

最後にansを出力します。

【別解】省略したい

以下のように3つ目の引数を指定すると、偶数を飛ばして奇数のみになります。

for i in range(1, n+1, 2):

3つ目の引数には、-2など負の数も指定できます。-1とした場合には逆順となり、省略した場合は1を指定したものと同じになります。

他にも、とあるAが約数である場合「A×B=(調査中の数字)」となるBも約数となるので、2つずつカウントを増やしていく方法でも解けます。

「AtCoder」解説一覧に戻る

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です