def run(): c = 0 # sieve.extend(10000000) n = 1 m = 10000000 ran = sieve.totientrange(0, m) candidates = [] for i in sieve.totientrange(2, m): n += 1 # print(n) if isPermutation(n, i): candidates.append([n, n / i]) # print(f"count: {c}: {i}") print(len(candidates)) out = min(candidates, key=lambda x: x[1]) print(out)
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))
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))
# 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') #totientrange(a, b) generates all totient numbers for the range [a, b). Simply it is a list of outputs Totient_range = sieve.totientrange(1, 10) print(' Values of Totient(n):', [i for i in Totient_range]) #sympy.ntheory.generate.prime(nth) return the n th prime number. Logarithmic integral of x is a pretty nice approximation # for number of primes <= x, i.e. li(x) ~ pi(x) print('\n', 'See this! The 1000000th prime: ', generate.prime(1000000)) #sympy.ntheory.generate.primepi(n) returns the value of the prime counting function pi(n) = the number of prime numbers # less than or equal to n. print('\n', 'There are ', generate.primepi(40), ' primes < or = the given input') #sympy.ntheory.generate.nextprime(n, ith=1) return the ith prime greater than n print('\n', 'Next 5th prime after 2 is ', generate.nextprime(2, ith=5)) #sympy.ntheory.generate.prevprime(n) return the largest prime smaller than n
# return False # if n == 3 or n == 5 or n == 7: # return True # for i in range(3, int(n**0.5)+1): # if n % i == 0: # return False # return True # ## Generate primes up to maxD #primes = list(filter(isPrime, range(1, maxD+1))) #divisors = [[] for i in range(maxD+1)] # #for prime in primes: # i = 1 # while i * prime <= maxD: # divisors[i * prime].append(prime) # i += 1 L = list(sieve.totientrange(minD, maxD + 1)) print("Completed sieve construction!") for d, t in zip(range(minD, maxD + 1), L): resilience = t / (d - 1) # prod = reduce(lambda x, y: x*y, list(map(lambda a : 1 - 1/float(a), divisors[d]))) if resilience < TARGET_RESILIENCE + TOLERANCE: print(d, resilience) if resilience < TARGET_RESILIENCE: print("Success!") break