結果
問題 | No.144 エラトステネスのざる |
ユーザー |
|
提出日時 | 2024-03-19 00:26:10 |
言語 | PyPy3 (7.3.15) |
結果 |
AC
|
実行時間 | 359 ms / 2,000 ms |
コード長 | 1,572 bytes |
コンパイル時間 | 159 ms |
コンパイル使用メモリ | 82,520 KB |
実行使用メモリ | 89,352 KB |
最終ジャッジ日時 | 2024-09-30 05:05:15 |
合計ジャッジ時間 | 4,409 ms |
ジャッジサーバーID (参考情報) |
judge3 / judge5 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 17 |
ソースコード
import sysimport mathimport bisectfrom heapq import heapify, heappop, heappushfrom collections import deque, defaultdict, Counterfrom functools import lru_cachefrom itertools import accumulate, combinations, permutations, productsys.setrecursionlimit(1000000)MOD = 10 ** 9 + 7MOD99 = 998244353input = lambda: sys.stdin.readline().strip()NI = lambda: int(input())NMI = lambda: map(int, input().split())NLI = lambda: list(NMI())SI = lambda: input()SMI = lambda: input().split()SLI = lambda: list(SMI())EI = lambda m: [NLI() for _ in range(m)]# 高速エラストテネス sieve[n]はnの最小の素因数def make_prime_table(n):sieve = list(range(n + 1))sieve[0] = -1sieve[1] = -1for i in range(4, n + 1, 2):sieve[i] = 2for i in range(3, int(n ** 0.5) + 1, 2):if sieve[i] != i:continuefor j in range(i * i, n + 1, i * 2):if sieve[j] == j:sieve[j] = ireturn sieveprime_table = make_prime_table(1000002)# 素数列挙primes = [p for i, p in enumerate(prime_table) if i == p]# 約数の個数 上のprime_tableと組み合わせて使うdef div_num(n):result = 1while n != 1:p = prime_table[n]e = 0while n % p == 0:n //= pe += 1result *= e+1return resultdef main():N, p = SMI()N = int(N)p = float(p)ans = 0for n in range(2, N+1):d = div_num(n)ans += pow(1-p, d-2)print(ans)if __name__ == "__main__":main()