【ちょっとづつAtCode】ABC193 C – Unexpressed

ちょっとづつAtCoder

引用

(引用)

問題文
整数 N が与えられます。 1 以上 N 以下の整数のうち、 2 以上の整数 a,bを用いて a^bと表せないものはいくつあるでしょうか?
制約
N は整数
1≤N≤1010

AtCoder Beginner Contest 193 C – Unexpressedより引用

入力

入力は以下の形式で標準入力から与えられる。

N

出力

答えを出力せよ。

入力例 1

8

出力例 1

6

4,8 は 2^2=4, 2^3=8 と、a^b の形で表すことができます。
1,2,3,5,6,7 は 2 以上の整数 a,b を用いて a^b と表せないので、答えは 6 です。

考えてみました①

a^bで表せる方が少ないとはすぐに気づくのですが、2^4と8^2で重複してしまうから素数を羅列〜とか色々考えてしまったのですが、セットで重複を消せば良かったんですね

N = 65として

from decimal import Decimal as De
N = int(input())
n = De(N)
A = {0}
for i in range(2, int(n.sqrt()+1)):
    x = 0
    j = 2
    while x <= n:
        x = i ** j
        if x <= n:
            A.add(x)
            j += 1
print(N - len(A) + 1)

from decimal import Decimal as Deはいらないかもしれないけれど、なんとなくつけました。

解説のやつがめちゃシンプル

N = int(input())
sq = int(N ** 0.5)
s = set()
for a in range(2, sq + 1):
    x = a * a
    while x <= N:
        s.add(x)
        x *= a
print(N - len(s))


空集合へ追加できないから

A = {}
A.add(何か)ってやると、エラーが出るので(敢えて{0}を入れてた)
A = set()ってやるんですね

コメント

タイトルとURLをコピーしました