#!/usr/bin/env python3 def primes(n): sieve = [False] * n yield 2 for p in range(3, n, 2): if sieve[p]: continue for i in range(p**2, n, 2*p): sieve[i] = True yield p def search(i=0, n=1, sign=1): r = 0 while squares[i] * n <= N: m = n * squares[i] r += sign * (N // m) r += search(i+1, m, sign * (-1)) i += 1 return r N = 2**50 squares = [p**2 for p in primes(2**25)] + [N+1] print(N - search())