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つずつカウントを増やしていく方法でも解けます。