def problem60():
    """Problem 60 - Prime pair sets"""
    sieve.extend(
        PRIME_LIMIT)  # find_prime_concatenates requires non-empty sieve
    solutions = []
    find_prime_concatenates([], 5, PRIME_LIMIT, solutions)
    return min(sum(s) for s in solutions)
Exemple #2
0
def test_generate():
    from sympy.ntheory.generate import sieve
    sieve._reset()
    assert nextprime(-4) == 2
    assert nextprime(2) == 3
    assert nextprime(5) == 7
    assert nextprime(12) == 13
    assert prevprime(3) == 2
    assert prevprime(7) == 5
    assert prevprime(13) == 11
    assert prevprime(19) == 17
    assert prevprime(20) == 19

    sieve.extend_to_no(9)
    assert sieve._list[-1] == 23

    assert sieve._list[-1] < 31
    assert 31 in sieve

    assert nextprime(90) == 97
    assert nextprime(10**40) == (10**40 + 121)
    assert prevprime(97) == 89
    assert prevprime(10**40) == (10**40 - 17)
    assert list(sieve.primerange(10, 1)) == []
    assert list(primerange(10, 1)) == []
    assert list(primerange(2, 7)) == [2, 3, 5]
    assert list(primerange(2, 10)) == [2, 3, 5, 7]
    assert list(primerange(1050, 1100)) == [1051, 1061,
        1063, 1069, 1087, 1091, 1093, 1097]
    s = Sieve()
    for i in range(30, 2350, 376):
        for j in range(2, 5096, 1139):
            A = list(s.primerange(i, i + j))
            B = list(primerange(i, i + j))
            assert A == B
    s = Sieve()
    assert s[10] == 29

    assert nextprime(2, 2) == 5

    raises(ValueError, lambda: totient(0))

    raises(ValueError, lambda: reduced_totient(0))

    raises(ValueError, lambda: primorial(0))

    assert mr(1, [2]) is False

    func = lambda i: (i**2 + 1) % 51
    assert next(cycle_length(func, 4)) == (6, 2)
    assert list(cycle_length(func, 4, values=True)) == \
        [17, 35, 2, 5, 26, 14, 44, 50, 2, 5, 26, 14]
    assert next(cycle_length(func, 4, nmax=5)) == (5, None)
    assert list(cycle_length(func, 4, nmax=5, values=True)) == \
        [17, 35, 2, 5, 26]
    sieve.extend(3000)
    assert nextprime(2968) == 2969
    assert prevprime(2930) == 2927
    raises(ValueError, lambda: prevprime(1))
def test_prime():
    assert prime(1) == 2
    assert prime(2) == 3
    assert prime(5) == 11
    assert prime(11) == 31
    assert prime(57) == 269
    assert prime(296) == 1949
    assert prime(559) == 4051
    assert prime(3000) == 27449
    assert prime(4096) == 38873
    assert prime(9096) == 94321
    assert prime(25023) == 287341
    raises(ValueError, lambda: prime(0))
    sieve.extend(3000)
    assert prime(401) == 2749
def test_prime():
    assert prime(1) == 2
    assert prime(2) == 3
    assert prime(5) == 11
    assert prime(11) == 31
    assert prime(57) == 269
    assert prime(296) == 1949
    assert prime(559) == 4051
    assert prime(3000) == 27449
    assert prime(4096) == 38873
    assert prime(9096) == 94321
    assert prime(25023) == 287341
    raises(ValueError, lambda: prime(0))
    sieve.extend(3000)
    assert prime(401) == 2749
Exemple #5
0
def problem12(nr_divisors):
    """Problem 12 - Highly divisible triangular number"""
    sieve.extend(MAX_PRIME)

    x = 1
    while True:
        nr = number_of_devisors(x)
        if x % 2 == 0:  # even
            nr = number_of_devisors(x // 2) * number_of_devisors(x + 1)
        else:  # uneven
            nr = number_of_devisors(x) * number_of_devisors((x + 1) // 2)
        if nr >= nr_divisors:
            break
        x += 1

    return x * (x + 1) // 2
def test_compositepi():
    assert compositepi(1) == 0
    assert compositepi(2) == 0
    assert compositepi(5) == 1
    assert compositepi(11) == 5
    assert compositepi(57) == 40
    assert compositepi(296) == 233
    assert compositepi(559) == 456
    assert compositepi(3000) == 2569
    assert compositepi(4096) == 3531
    assert compositepi(9096) == 7967
    assert compositepi(25023) == 22259
    assert compositepi(10**8) == 94238544
    assert compositepi(253425253) == 239568856
    assert compositepi(8769575643) == 8368111320
    sieve.extend(3000)
    assert compositepi(2321) == 1976
def test_primepi():
    assert primepi(1) == 0
    assert primepi(2) == 1
    assert primepi(5) == 3
    assert primepi(11) == 5
    assert primepi(57) == 16
    assert primepi(296) == 62
    assert primepi(559) == 102
    assert primepi(3000) == 430
    assert primepi(4096) == 564
    assert primepi(9096) == 1128
    assert primepi(25023) == 2763
    assert primepi(10**8) == 5761455
    assert primepi(253425253) == 13856396
    assert primepi(8769575643) == 401464322
    sieve.extend(3000)
    assert primepi(2000) == 303
def test_primepi():
    assert primepi(1) == 0
    assert primepi(2) == 1
    assert primepi(5) == 3
    assert primepi(11) == 5
    assert primepi(57) == 16
    assert primepi(296) == 62
    assert primepi(559) == 102
    assert primepi(3000) == 430
    assert primepi(4096) == 564
    assert primepi(9096) == 1128
    assert primepi(25023) == 2763
    assert primepi(10**8) == 5761455
    assert primepi(253425253) == 13856396
    assert primepi(8769575643) == 401464322
    sieve.extend(3000)
    assert primepi(2000) == 303
def test_compositepi():
    assert compositepi(1) == 0
    assert compositepi(2) == 0
    assert compositepi(5) == 1
    assert compositepi(11) == 5
    assert compositepi(57) == 40
    assert compositepi(296) == 233
    assert compositepi(559) == 456
    assert compositepi(3000) == 2569
    assert compositepi(4096) == 3531
    assert compositepi(9096) == 7967
    assert compositepi(25023) == 22259
    assert compositepi(10**8) == 94238544
    assert compositepi(253425253) == 239568856
    assert compositepi(8769575643) == 8368111320
    sieve.extend(3000)
    assert compositepi(2321) == 1976
Exemple #10
0
def test_prime():
    assert prime(1) == 2
    assert prime(2) == 3
    assert prime(5) == 11
    assert prime(11) == 31
    assert prime(57) == 269
    assert prime(296) == 1949
    assert prime(559) == 4051
    assert prime(3000) == 27449
    assert prime(4096) == 38873
    assert prime(9096) == 94321
    assert prime(25023) == 287341
    assert prime(10000000) == 179424673  # issue #20951
    assert prime(99999999) == 2038074739
    raises(ValueError, lambda: prime(0))
    sieve.extend(3000)
    assert prime(401) == 2749
    raises(ValueError, lambda: prime(-1))
def test_composite():
    from sympy.ntheory.generate import sieve
    sieve._reset()
    assert composite(1) == 4
    assert composite(2) == 6
    assert composite(5) == 10
    assert composite(11) == 20
    assert composite(41) == 58
    assert composite(57) == 80
    assert composite(296) == 370
    assert composite(559) == 684
    assert composite(3000) == 3488
    assert composite(4096) == 4736
    assert composite(9096) == 10368
    assert composite(25023) == 28088
    sieve.extend(3000)
    assert composite(1957) == 2300
    assert composite(2568) == 2998
    raises(ValueError, lambda: composite(0))
def test_composite():
    from sympy.ntheory.generate import sieve
    sieve._reset()
    assert composite(1) == 4
    assert composite(2) == 6
    assert composite(5) == 10
    assert composite(11) == 20
    assert composite(41) == 58
    assert composite(57) == 80
    assert composite(296) == 370
    assert composite(559) == 684
    assert composite(3000) == 3488
    assert composite(4096) == 4736
    assert composite(9096) == 10368
    assert composite(25023) == 28088
    sieve.extend(3000)
    assert composite(1957) == 2300
    assert composite(2568) == 2998
    raises(ValueError, lambda: composite(0))
Exemple #13
0
def main():
    n = 1000000
    output = 0
    sieve.extend(1000000)
    for i in range(2, n + 1):
        for j in range(1, i):
            if (i in sieve or j in sieve):
                output += 1
            elif gcd(i, j) == 1:
                output += 1
        print(i)
    print("output: " + str(output))

    # output = n - 1 # all numbers have 1/n apart from 1
    # primes = 1 # primes less than 3
    # for i in range(3,n + 1):
    #     if isprime(i): # if i is prime we add i - 2 to the output as we've already counted 1/i and don't count i/i
    #         primes += 1 # there's one more prime < i
    #         output += i - 2 # see above
    #     else: # number is not prime
    #         output += primes - len(primefactors(i))
    #     print(i)
    print("Count: " + str(output))
Exemple #14
0
def test_primepi():
    assert primepi(-1) == 0
    assert primepi(1) == 0
    assert primepi(2) == 1
    assert primepi(Rational(7, 2)) == 2
    assert primepi(3.5) == 2
    assert primepi(5) == 3
    assert primepi(11) == 5
    assert primepi(57) == 16
    assert primepi(296) == 62
    assert primepi(559) == 102
    assert primepi(3000) == 430
    assert primepi(4096) == 564
    assert primepi(9096) == 1128
    assert primepi(25023) == 2763
    assert primepi(10**8) == 5761455
    assert primepi(253425253) == 13856396
    assert primepi(8769575643) == 401464322
    sieve.extend(3000)
    assert primepi(2000) == 303

    n = Symbol('n')
    assert primepi(n).subs(n, 2) == 1

    r = Symbol('r', real=True)
    assert primepi(r).subs(r, 2) == 1

    assert primepi(S.Infinity) is S.Infinity
    assert primepi(S.NegativeInfinity) == 0

    assert limit(primepi(n), n, 100) == 25

    raises(ValueError, lambda: primepi(I))
    raises(ValueError, lambda: primepi(1 + I))
    raises(ValueError, lambda: primepi(zoo))
    raises(ValueError, lambda: primepi(nan))
Exemple #15
0
from sympy import sieve, isprime
from numpy import sqrt

sieve.extend(5)

current = 9
conjecture = True

while conjecture:
    while isprime(current):
        current += 2
    sieve.extend(current)
    isGood = False
    for i in sieve._list:
        if sqrt((current - i) / 2) % 1 == 0:
            isGood = True
            break
    if not isGood:
        print(current)
        conjecture = False
    current += 2

print("Done")

# Answer: 5777
def test_generate():
    from sympy.ntheory.generate import sieve
    sieve._reset()
    assert nextprime(-4) == 2
    assert nextprime(2) == 3
    assert nextprime(5) == 7
    assert nextprime(12) == 13
    assert prevprime(3) == 2
    assert prevprime(7) == 5
    assert prevprime(13) == 11
    assert prevprime(19) == 17
    assert prevprime(20) == 19

    sieve.extend_to_no(9)
    assert sieve._list[-1] == 23

    assert sieve._list[-1] < 31
    assert 31 in sieve

    assert nextprime(90) == 97
    assert nextprime(10**40) == (10**40 + 121)
    assert prevprime(97) == 89
    assert prevprime(10**40) == (10**40 - 17)

    assert list(sieve.primerange(10, 1)) == []
    assert list(sieve.primerange(5, 9)) == [5, 7]
    sieve._reset(prime=True)
    assert list(sieve.primerange(2, 12)) == [2, 3, 5, 7, 11]

    assert list(sieve.totientrange(5, 15)) == [4, 2, 6, 4, 6, 4, 10, 4, 12, 6]
    sieve._reset(totient=True)
    assert list(sieve.totientrange(3, 13)) == [2, 2, 4, 2, 6, 4, 6, 4, 10, 4]
    assert list(sieve.totientrange(900, 1000)) == [totient(x) for x in range(900, 1000)]
    assert list(sieve.totientrange(0, 1)) == []
    assert list(sieve.totientrange(1, 2)) == [1]

    assert list(sieve.mobiusrange(5, 15)) == [-1, 1, -1, 0, 0, 1, -1, 0, -1, 1]
    sieve._reset(mobius=True)
    assert list(sieve.mobiusrange(3, 13)) == [-1, 0, -1, 1, -1, 0, 0, 1, -1, 0]
    assert list(sieve.mobiusrange(1050, 1100)) == [mobius(x) for x in range(1050, 1100)]
    assert list(sieve.mobiusrange(0, 1)) == []
    assert list(sieve.mobiusrange(1, 2)) == [1]

    assert list(primerange(10, 1)) == []
    assert list(primerange(2, 7)) == [2, 3, 5]
    assert list(primerange(2, 10)) == [2, 3, 5, 7]
    assert list(primerange(1050, 1100)) == [1051, 1061,
        1063, 1069, 1087, 1091, 1093, 1097]
    s = Sieve()
    for i in range(30, 2350, 376):
        for j in range(2, 5096, 1139):
            A = list(s.primerange(i, i + j))
            B = list(primerange(i, i + j))
            assert A == B
    s = Sieve()
    assert s[10] == 29

    assert nextprime(2, 2) == 5

    raises(ValueError, lambda: totient(0))

    raises(ValueError, lambda: reduced_totient(0))

    raises(ValueError, lambda: primorial(0))

    assert mr(1, [2]) is False

    func = lambda i: (i**2 + 1) % 51
    assert next(cycle_length(func, 4)) == (6, 2)
    assert list(cycle_length(func, 4, values=True)) == \
        [17, 35, 2, 5, 26, 14, 44, 50, 2, 5, 26, 14]
    assert next(cycle_length(func, 4, nmax=5)) == (5, None)
    assert list(cycle_length(func, 4, nmax=5, values=True)) == \
        [17, 35, 2, 5, 26]
    sieve.extend(3000)
    assert nextprime(2968) == 2969
    assert prevprime(2930) == 2927
    raises(ValueError, lambda: prevprime(1))
sqrtlim = int(sqrt(lim))

gen = set()
S = 1

def nextgen():
    global gen,S
    #eprint(gen)
    newgen = set()
    S += len(gen)
    for n in gen:
        for p in sieve.primerange(1,min(sqrtlim,lim//n+1)):
            newgen.add(p*n)
    del gen
    gen = newgen 

if __name__=="__main__":
    tic()
    sieve.extend(sqrtlim)
    for p1 in sieve.primerange(1,sqrtlim):
        for p2 in sieve.primerange(p1,min(sqrtlim,lim//p1+1)):
            if p1*p2 > lim:
                break
            for p3 in sieve.primerange(p2,min(sqrtlim,lim//(p1*p2)+1,p1*p2+1)):
                gen.add(p1*p2*p3)
    while len(gen)>0:
        nextgen()        
    print(S)
    toc()
    exit()
Exemple #18
0
import math
import itertools
from sympy import sieve

length = 100000
sieve.extend(length)

divisors = [0]*length
divisors[1] = [1]
divisors[2] = [1,2]

def get_two_factors(n):
	i = 2
	while((n%i)!=0):
		i+=1
	return (n/i, i)

for i in range(3,length):
	if i in sieve:
		divisors[i] = [1,i]
	else:
		a,b = get_two_factors(i)
		divisors[i] = list(set([x * y for (x, y) in itertools.product(divisors[a], divisors[b])]))

for i in range(1,length):
	small = i if i%2!=0 else i/2
	big = i+1 if (i+1)%2!=0 else (i+1)/2
	total = len(divisors[small]) * len(divisors[big])
	if (total)>500:
		print small,big,total
		break
Exemple #19
0
from sympy import sieve  # library for primes


def get_pfct(n):
    i = 2;
    factors = []
    while i * i <= n:
        if n % i:
            i += 1
        else:
            n //= i
            factors.append(i)
    if n > 1:
        factors.append(n)
    return len(factors)


sieve.extend(110)  # first 110 primes...
primes = sieve._list

pool = []

for each in range(0, 121):
    pool.append(get_pfct(each))

for i, each in enumerate(pool):
    if each in primes:
        print(i, end=',')
    ezpz
"""

from Euler.tictoc import *
from sympy import sieve
from Euler.digits import intToDigits, digitsToInt


def rotations(n):
    dig = intToDigits(n)
    for i in range(1, len(dig)):
        yield digitsToInt(dig[i:] + dig[:i])


if __name__ == "__main__":
    tic()
    sieve.extend(1e6)
    primes = {p for p in sieve._list if p < 1e6}
    found = set()
    for p in primes:
        if p in found:
            continue
        rot = rotations(p)
        if all(map(lambda r: r in primes, rot)):
            found.add(p)
            for r in rot:
                found.add(r)
    print(len(found))
    toc()
    exit()
Exemple #21
0
def primeRange2(numRange):
    sieve.extend(numRange)
    print("\nHere are the prime numbers up to the number you entered: ", sieve._list)
    print("\nThere are", len(sieve._list), "prime numbers up to", numRange)
Exemple #22
0
#NumberTh functions with SymPy package
#-------------------------------------

from sympy import ntheory
from sympy import sieve
from sympy import generate

sieve._reset(
)  # An infinite list of prime numbers, implemented as a dynamically growing sieve of Eratosthenes.#When a lookup is
# requested involving an odd number that has not been sieved,the sieve is automatically extended up to that number.

print(13 in sieve)  # prints 'True' if the input is prime,

sieve.extend(40)  #for input n grows the sieve to contain all primes <= n

print(sieve[10])  # returns n th prime

sieve.extend_to_no(15)  # extends upto n th prime

# mobiusrange(a,b) genarates Mobius numbers for the range [a,b), means output will be a list.
Mob_func = sieve.mobiusrange(7, 12)
print('\n Mobius function outputs in the given range:', [i for i in Mob_func])

# primerange(a,b) generates all prime numbers in the range [a,b)
Prime_list = sieve.primerange(1, 5)
print('\n Primes in the given range are :', [i for i in Prime_list])

#search(n) return the indices i, j of the primes that bound n. If n is prime then i == j. Although n can be an expression,
# if ceiling cannot convert it to an integer then an error will be raised.
x, y = sieve.search(25)
print('\n The given input is in between ', '(', x, ',', y, ')', 'th Primes \n')
Exemple #23
0
from PermuteString import PermuteString
from sympy import sieve
import itertools

sieve.extend(1000000)

primes = sieve._list
stringprimes=[]
for prime in primes:
    stringprimes.append(str(prime))

count = 0

primeset = set(stringprimes)

excluded_digits = set(['0','2','4','5','6','8'])

for p in stringprimes:
    if not excluded_digits.isdisjoint(set(p)):
        continue

    perm = PermuteString(p)

    if set(perm) <= primeset:
        count += 1
        print p

count += 2

print count
Exemple #24
0
from sympy import sieve

sieve.extend(2000000)

maxcount = 0
amax = 0
bmax = 0

for b in sieve.primerange(0,1000):
    for a in xrange(-2*(b/2)-1, 1000, 2):
        term = lambda n: n**2 + a*n + b
        i = 0
        count = 0
        while sieve.__contains__(term(i)):
            i += 1
            count += 1

        if count > maxcount: 
            maxcount = count
            amax = a
            bmax = b

print maxcount
print amax, bmax
Exemple #25
0
from sympy import isprime, divisors, sieve

sieve.extend(100000000)

def cond(n):
    if not isprime(int(2 + n/2)): return False
    else:
        d = divisors(n)
        for i in range(2,int(len(d)/2)):
            if not isprime(d[i] + int(n/d[i])): return False
    return True

U = [i-1 for i in sieve.primerange(1,100000000) if (i-1) % 4 != 0]

print(sum([n for n in U if cond(n)]))