def m_search(n,k,m=1,phi=1,lowerInd=0): global primes,mask,pcap s = 0 if k == 0: M = m*phi-phi+m bnd = int(M**.25) pi = bisect_right(primes,n/m) if n/m > pcap: f = shanks_factorize(M,primes[:15]) for d in divisors([[bas,f[bas]] for bas in f]): q,r = divmod(d-phi,m-phi) if r == 0 and q > primes[lowerInd] and q*m <= n and is_prime(q,pcap-1,mask): if (q*m-1) % (q*m - (q-1)*phi) == 0: s += q*m else: for q in primes[lowerInd+1:pi+1]: if q*m <= n and (q*m-1) % (q*m - (q-1)*phi) == 0: s+= q*m # print q*m,q,m return s bound = int((n/m)**(1./(k+1))) i=lowerInd+1 for i,p in enumerate(primes[lowerInd+1:],lowerInd+1): if p > bound: break else: s += m_search(n,k-1,m*p,phi*(p-1),i) return s
def find_pairs(n): global primes,mask s = 0 pairs = {} for p in primes[1:]: num = p**2-p+1 f = shanks_factorize(num,primes[:15]) for k in divisors([[bas,f[bas]] for bas in f] ): q = num/k - p + 1 if q > 0 and q > p and q*p <= n and is_prime(q,pcap-1,mask): s += p*q # print p,q if p not in pairs: pairs[p] = [q] else: pairs[p].append(q) print "Sum over semi-primes %d" % s #now do backtracking pair-combos for p1 in pairs: for p2 in pairs[p1]: s += cores_backtrack(n/p1/p2,pairs,[p1,p2]) return s
def p_sum(d): s = 0 for i in xrange(3): s += pe.is_prime(d[i],cap,mask) return s
pcap = 2*10**5 n = 10**9 mask = pe.mark_primes(pcap) cache = [] pDivs = {} i = 1 e1 = 0 while i < cap: j = 1 e2 = 0 cache.append([]) while j*i < cap: t = j*i cache[e1].append(t) for k in xrange(t,cap,t): if pe.is_prime(k+1,pcap,mask): if k+1 not in pDivs: pDivs[k+1] = [t] else: pDivs[k+1].append(t) j *= 5 e2 += 1 i *= 2 e1 += 1 s = 0 num_found = 0 m = 40