Exemple #1
0
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
Exemple #2
0
def primeFrogProbability(N, croak_string):
    ps = Primes.MakePrimeList(N)
    ans = Fraction(0)
    memo = {}
    for position in range(1, N + 1):
        ans += calcCroakProbability(N, position, croak_string, ps, memo)
    return ans / N
Exemple #3
0
def Program(nMax=100, GRAPHICS=False):
    primes = Primes.MakePrimeList(nMax)
    primeGraph = Networks.UndirectedGraph()

    for p in primes:
        primeGraph.AddNode(p)
        for p2 in primeGraph.GetNodes():
            if Primes.isPrime(concatenateIntegers(p, p2), primes):
                if Primes.isPrime(concatenateIntegers(p2, p), primes):
                    primeGraph.AddEdge(p, p2)

    for p1 in primes:
        possibles = primeGraph.GetNeighbors(p1)
        for p2 in possibles:
            possibles2 = listIntersection(possibles,
                                          primeGraph.GetNeighbors(p2))
            for p3 in possibles2:
                possibles3 = listIntersection(possibles2,
                                              primeGraph.GetNeighbors(p3))
                for p4 in possibles3:
                    possibles4 = listIntersection(possibles3,
                                                  primeGraph.GetNeighbors(p4))
                    for p5 in possibles4:
                        print(p1, p2, p3, p4, p5), p1 + p2 + p3 + p4 + p5

    if GRAPHICS:
        NetGraphics.DisplayCircleGraph(primeGraph)

    return primeGraph
def Euler118_2():
    primes = Primes.MakePrimeList(100000000)
    print 'Primes Calculated'
    primes = [p for p in primes if not repeats_digits(p)]
    print 'Primes with repeated digits eliminated'
    num_sets = build_sets(0,[], primes)
    print 'Number of Pandigital Prime Sets: '+str(num_sets)
    return num_sets
Exemple #5
0
def Euler484a(N):
    start = time.clock()
    p_max = int(sp.sqrt(N) + 1000)
    primes = Primes.MakePrimeList(p_max)
    print 'Primes up to %d calculated.  %d primes' % (p_max, len(primes))
    ans = F(N, 0, primes)
    end = time.clock()
    print '%f seconds' % (end - start, )
    return ans
def Euler118_1():
    permutes   = itertools.permutations([1,2,3,4,5,6,7,8,9])
    primes     = Primes.MakePrimeList(10000)
    prime_sets = set()
    
    for digit_list in permutes:
        find_prime_sets(digit_list, set(), prime_sets, primes)
    print 'Number of Pandigital Prime Sets: '+str(len(prime_sets))
    return prime_sets
def old_432(m):
    primes = Primes.MakePrimeList(int(m * 2))
    ans = sum_range(1, 18)
    ans += weird_sum_tot(m, 7, primes)
    ans *= 510510
    for ix in range(7):
        ans *= (primes[ix] - 1)
        ans /= primes[ix]

    return ans
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
Exemple #9
0
def Euler77(numWays):
    """
    Finds the first number that can be partitioned into primes in numWays.
    """
    primeList = Primes.MakePrimeList(max(numWays, 100))
    partialPrimeMemo = {}
    n = 2
    while primePartition(n, primeList, partialPrimeMemo) < numWays:
        n += 1
    return n
Exemple #10
0
def Euler231(n, m):
    """ n choose m
    """
    pList = Primes.MakePrimeList(n + 1)
    summ = 0
    for p in pList:
        summ += p * (Number_Ps_in_N_factorial(n, p) - Number_Ps_in_N_factorial(
            m, p) - Number_Ps_in_N_factorial(n - m, p))

    return summ
def Euler131(N):
    primes = Primes.MakePrimeList(int(sp.sqrt(N))+4)
    x = 1
    p = 3*x*x+3*x+1
    count = 0
    while p <= N:
        if Primes.isPrime(p, primes):
            count += 1
        x += 1
        p = 3*x*x + 3*x + 1
    return count
Exemple #12
0
def calc_mobius(n):
    primes = Primes.MakePrimeList(n)
    mu = [1]*(n+1)
    mu[0] = 0
    mu[1] = 1
    for p in primes:
        mu[p] = -1
        i = 2
        while p * i <= n:
            mu[p*i] *= -1
            i += 1
        i = 1
        while p*p*i <= n:
            mu[p*p*i] = 0
            i += 1
    return mu
Exemple #13
0
def Euler268(N, M=100):
    primes = Primes.MakePrimeList(M)
    #return f(primes, 4, N)
    added = [0] * (len(primes) + 1)
    ans = 0
    for r in range(4, len(primes) + 1):
        print N, r, ans
        if prod(primes[:r]) > N:
            break
        multiplier = 1 - added[r]
        # Update how many times we have added numbers divisible by
        # exactly x primes in the list.
        for x in range(r, len(primes) + 1):
            added[x] += multiplier * comb(x, r, True)
        # Actually add them
        ans += multiplier * sum(N // prod(c) for c in combinations(primes, r))
    return ans
Exemple #14
0
def Euler351(N):
    M = N / 2
    primes = Primes.MakePrimeList(M)
    ans = 0
    r = 1
    while r < len(primes) and prod(primes[:r]) <= M:
        sign = int((-1)**(r + 1))
        count = 0
        for c in combProdLessThan(primes, r, M):
            count += 1
            x = prod(c)
            p = int(N // x)
            q = int(N // (2 * x))
            ans += sign * (p * q - q * (q + 1))
        print '%d from list of len %d: %d times; \ttotal %d' % (r, len(primes),
                                                                count, ans)
        r += 1
    return 6 * (2 * ans + M + N - 2)
Exemple #15
0
def Euler122():
    primes = Primes.MakePrimeList(200)
    m = {}
    m[1] = 0
    for x in range(2, 201):
        if x in primes:
            m[x] = m[x - 1] + 1
        else:
            m[x] = 0
            y = x
            for p in primes:
                while y % p == 0 and y > 0:
                    m[x] += m[p]
    ans = 0
    for x in range(1, 201):
        ans += m[x]

    print 'Sum: ', ans
    return ans
Exemple #16
0
def Euler193(N):
    '''
    Calculates the number of squarefree numbers less than N
    '''
    root = round(sp.sqrt(N))
    primes = Primes.MakePrimeList(root)
    num = 0
    
    n = 1
    min_prod = 2
    #---------------------------------------#
    # Loop over the number of primes to use #
    # in the inclusion-exclusion principle. #
    #---------------------------------------#
    while min_prod <= root:
        #-----------------------------------------#
        # Iterate over all the combinations of n  #
        # primes, adding or subtracting according #
        # to the inclusion-exclusion principle.   #
        #-----------------------------------------#
        ix_list = range(n)
        done = False
        while not done:
            # Calculate the number of square including numbers
            p = sp.product([primes[ix]*primes[ix] for ix in ix_list])
            #print [primes[i] for i in ix_list]
            if n % 2 == 0:
                num -= (N-1) / p
                #print '-'+str(N / p)
            else:
                num += (N-1) / p
                #print '+'+str(N/p)
            done = not ix_combo(ix_list, primes, root)
            
        n += 1
        min_prod = sp.product(primes[:n])
        
    num = N - num - 1
    #print 'Number of squarefree numbers below '+str(N)+': '+str(num)
    return num
def Euler122(N):
    primes = Primes.MakePrimeList(N+2)
    m = {}
    m[1] = 0
    for x in range(2, N+1):
        if x in primes:
            #print x, m[x-1]
            m[x] = m[x-1] + 1
        else:
            m[x] = 0
            y = x+0
            for p in primes:
                while y%p == 0 and y > 0:
                    m[x] += m[p]
                    y /= p
    ans = 0
    for x in range(1, N+1):
        ans += m[x]

    print 'Sum: ', ans
    print m
    return ans
def Euler87(n):
    ps = Primes.MakePrimeList(int(scipy.sqrt(n))*2)
    nF = 0
    nums = []
    count = 0
    while ps[nF]**4 <= n:
        nC = 0
        while ps[nF]**4 + ps[nC]**3 <= n:
            nS = 0
            while ps[nF]**4 + ps[nC]**3 + ps[nS]**2 <= n:
                a = ps[nF]**4 + ps[nC]**3 + ps[nS]**2
                count += 1
                nums.append(a)
                nS += 1
            nC += 1
        nF += 1

    nums.sort()
    for x in range(1,len(nums)):
        if nums[x]==nums[x-1]:
            count -= 1
        
    return count
Exemple #19
0
def Euler484(N):
    rt = int(sp.sqrt(N) + 0.0001)
    primes = Primes.MakePrimeList(rt)
    mobius = make_mobius(rt, primes)
    marten = make_marten(mobius)
    d_fact = make_dfact(rt, primes)
    marten_mem = {}

    def Marten(n):
        if n < len(marten):
            return marten[n]
        try:
            return marten_mem[n]
        except KeyError:
            pass
        ans = 1
        r = int(sp.sqrt(n) + 0.0001)
        for g in range(2, r + 1):
            ans -= Marten(n // g)
        for z in range(1, r):
            ans += ((n // z) - (n // (z + 1))) * Marten(z)
        if n // r != r:
            ans += ((n // r) - (n // (r + 1))) * Marten(r)
        marten_mem[n] = ans
        return ans

    def sqf(n):
        ans = n
        r = int(sp.sqrt(n) + 0.0001)
        for d in range(2, r + 1):
            ans += mobius[d] * (n // (d * d))
        return ans

    def F(n):
        if n == 1:
            return 1
        ans = sqf(n)
        r = int(sp.sqrt(n) + 0.0001)
        for d in range(2, r + 1):
            if mobius[d] != 0:
                c = list(d_fact[d])
                ans -= mobius[d] * F1(c, [2] * len(c), n // (d * d))
        return ans

    def F1(p, r, n):
        if n == 0:
            return 0
        if not p:
            return F(n)
        p0 = p.pop(0)
        r0 = r.pop(0)
        if p0 == 2 and r0 == 2:
            return 4 * F1(p, r, n)
        pn = p[:]
        rn = r[:]
        pn.insert(0, p0)
        rn.insert(0, 1)
        ans = f(p0, r0) * F1(p, r, n)
        n /= p0
        s = 0
        while n > 0:
            ans -= f(p0, r0 + s) * F1(pn, rn, n)
            ans += f(p0, r0 + s + 1) * F1(p, r, n)
            n /= p0
            s += 1
        return ans

    def f(p, r):
        if r % p == 0:
            return p**r
        return p**(r - 1)

    return F(N), sqf, F, F1
Exemple #20
0
def Euler193_slow(N):
    primes = Primes.MakePrimeList(round(sp.sqrt(N)))
    x = range(N)
    for p in primes:
        x = [i for i in x if i%(p**2) != 0]
    return len(x)
Exemple #21
0
        r += n / d
        d *= p
    return r


def pow_mod(base, exp, mod):
    if exp == 0:
        return 1
    if exp == 1:
        return base % mod

    x = pow_mod(base, exp / 2, mod)
    if exp % 2 == 0:
        return (x * x) % mod
    else:
        return (((x * x) % mod) * base) % mod


MOD = 1000000009
n = 10**5
p_list = Primes.MakePrimeList(n)
print 'Primes Built',
print ' '
r_list = [get_r(p, n) for p in p_list]
print 'Exponents Built'
ans = 1
for i in range(len(p_list)):
    ans *= (pow_mod(p_list[i], 2 * r_list[i], MOD) + 1)
    ans %= MOD
print 'S(' + str(n) + '!) = ', ans
Exemple #22
0
 def __init__(self, limit):
     self.primes = Primes.MakePrimeList(int(sp.sqrt(2*limit)))
     self.memo   = {}