結果
| 問題 | No.144 エラトステネスのざる |
| コンテスト | |
| ユーザー |
FromBooska
|
| 提出日時 | 2023-02-15 09:53:51 |
| 言語 | PyPy3 (7.3.15) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 1,240 bytes |
| 記録 | |
| コンパイル時間 | 165 ms |
| コンパイル使用メモリ | 82,288 KB |
| 実行使用メモリ | 117,684 KB |
| 最終ジャッジ日時 | 2024-07-17 20:20:08 |
| 合計ジャッジ時間 | 4,575 ms |
|
ジャッジサーバーID (参考情報) |
judge3 / judge2 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 1 WA * 2 |
| other | AC * 4 WA * 6 TLE * 1 -- * 6 |
ソースコード
# たとえば8.2と4でちゃんと判定されるかどうか
# 4が既に判定されている可能性と判定されていない可能性がある
# 入力例3では4が生きているかの確率が反映されていないように見える
# もしそういう問題なら約数の個数だけが重要になる
# おかしいと思うが提出してみるか
def divisors(n):
lower_divisors , upper_divisors = [], []
i = 1
while i*i <= n:
if n % i == 0:
lower_divisors.append(i)
if i != n // i:
upper_divisors.append(n//i)
i += 1
return lower_divisors + upper_divisors[::-1]
N, prob = map(float, input().split())
N = int(N)
is_prime = [1]*(N + 1)
is_prime[0] = 0
is_prime[1] = 0
for p in range(2, N + 1):
if is_prime[p]:
for q in range(2*p, N + 1, p):
is_prime[q] = 0
primes = set()
for i in range(N):
if is_prime[i] == 1:
primes.add(i)
yuki_prime = [0]*(N+1)
# prob = 下線部の処理が行われる確率
for i in range(2, N+1):
if i in primes:
yuki_prime[i] = 1
else:
divs = divisors(i)[1:-1]
yuki_prime[i] = 1/(2**len(divs))
#print(yuki_prime)
ans = sum(yuki_prime)
print(ans)
FromBooska