def eightDivisorCount(n): ps = Primes.MakePrimeList(int(n**0.5)+2) primePi = Primes.Prime_Pi() f = 0 for p in ps: if p**7 > n: break #print p f += 1 for p in ps: if 2*p**3 > n: break f += primePi(n//(p**3), ps) print p,f,len(primePi.restricted_memo) if (n//(p**3)) >= p: f -= 1 #print p, primePi(n//(p**3), ps) for n1,p1 in enumerate(ps): if p1**3 >= n: break for p2 in ps[n1+1:]: if p1*p2*p2 >= n: break f += primePi(n//(p1*p2),ps) - primePi(p2,ps) #print p1,p2,primePi(n//(p1*p2),ps),primePi(p2,ps) if p2 < 10000: print p1,p2,f,len(primePi.restricted_memo) print p1,f,len(primePi.restricted_memo) return f
def new_432(m): #primes = Primes.MakePrimeList(int(1.2*m**(1./2))+100) primes = Primes.MakePrimeList(int(1.2 * m**(1. / 2)) + 120) prime_pi = Primes.Prime_Pi() ans = sum_range(1, 18) + func(m, 7, primes, prime_pi) ans *= 510510 for ix in range(7): ans *= (primes[ix] - 1) ans /= primes[ix] return ans
# Euler 484 - Arithmetic Derivative # projecteuler.net/problem=484 # Kelvin Blaser 2014.11.23 import Primes reload(Primes) import scipy as sp import time prime_pi = Primes.Prime_Pi() '''Q_mem = {} def Q(n,primes): #print 'Calculating Q[%d]'%(n,) if n >= 10**7: PRINT = True else: PRINT = False try: return Q_mem[n] except KeyError: pass ans = n r = 1 while r <= len(primes) and sp.prod(primes[:r]) <= n: sign = (-1)**r count = 0 for c in Primes.combProdLessThan(primes, r, n): ans += sign * (n//int(sp.prod(c))) count += 1 if PRINT: print '%d from list of len %d: %d times; \t%d : %d'%(r,len(primes),