def test_trunc_primes(self): primes = Primes() assert primes.truncatable(3797) primes = Primes() trunc = [] for prime in primes: if primes.truncatable(prime): trunc.append(prime) if len(trunc) == 10: assert sum(trunc) == 8920 break
def test_factors(self): primes = Primes() assert primes.factors(0) == [] assert primes.factors(1) == [] assert primes.factors(2) == [2] assert primes.factors(6) == [2, 3] assert primes.factors(8) == [2, 2, 2] assert primes.factors(29) == [29]
def pe41(): """ >>> pe41() 7652413 """ primes = Primes(1000000) for perm in permutations(range(7, 0, -1)): n = list_num(perm) if primes.is_prime(n): return n return -1
def generate_code(n, k): primes = Primes(n + k) primes_list = primes.primes_list #primes_list=primes.primes_3mod4() print(primes_list) words = gen_words(primes_list[0:k]) primes = primes_list[k:n + k] print(primes_list) print(primes) code = [[legendre_symbol(w, p) for p in primes] for w in words] return code
def generate_jacobi_code(n, k): nlog = int(math.log(n, 2)) primes = Primes(nlog + k + 1) primes_list = primes.primes_list #primes_list=primes.primes_3mod4() print(primes_list) words = gen_words(primes_list[0:k]) primes = primes_list[k:nlog + k] encoders = gen_words(primes) print(primes_list) print(encoders) code = [[jacoby_symbol(w, m) for m in encoders] for w in words] return code
def test_primes(self): primes = Primes() assert 0 not in primes assert 1 not in primes taketen = primes[1:11] correct = [2, 3, 5, 7, 11, 13, 17, 19, 23, 29] taketen = list(taketen) assert taketen == correct for x in range(1, 11): assert primes[x] == correct[x - 1] assert 104744 not in primes assert primes[10001] == 104743 itr = iter(primes) for _ in range(10100): next(itr) assert list(primes.countdown(29))[::-1] == correct
def main(): a= Primes(2, 100000, 2000) p = random.choice(a) q = random.choice(a) #print("随机生成两个素数p和q. p=",p," q=",q) n = p * q s = (p-1)*(q-1) #print("The p is ", p) #print("The q is ", q) #print("The n(p*q) is ",n) e = co_prime(s) #e = 5 #print("根据e和(p-1)*(q-1))互质得到: e=", e) d = find_d(e,s) #print("根据(e*d) 模 ((p-1)*(q-1)) 等于 1 得到 d=", d) #print("公钥: n=",n," e=",e) #print("私钥: n=",n," d=",d) pbvk = (n,e,d) return pbvk
def pe27(): """ >>> pe27() (-59231, (-61, 971, 71)) """ m = (0, 0, 0) primes = Primes(15000) for a in range(-999, 1000): for b in range(max(2, 1 - a), 1000): n, cnt = 0, 0 while 1: p = n * (n + a) + b if primes.is_prime(p): cnt += 1 else: break n += 1 if cnt > m[2]: m = (a, b, cnt) return (m[0] * m[1], m)
#!/usr/bin/env python # -*- coding: utf-8 -*- """ Solve project euler 58 Investigate the number of primes that lie on the diagonals of the spiral grid. """ from primes import Primes primes = Primes(30000) def pe58(p=0.1): """ >>> pe58() 26241 """ l = 7 ps = 8 d = 49 ds = 13 while ps > p * ds: l += 2 i = l - 1 ps += primes.is_prime(d + i) + primes.is_prime( d + 2 * i) + primes.is_prime(d + 3 * i) d += i << 2 ds += 4 return l
def test_totient(self): correct = [(2, 1), (3, 2), (4, 2), (5, 4), (6, 2), (7, 6), (8, 4), (9, 6), (10, 4), (4079147, 4074720)] primes = Primes() for (k, v) in correct: assert primes.totient(k) == v
def primes(): return Primes()
def test_is_circular(self): primes = Primes() assert primes.is_circular(2) assert primes.is_circular(971) assert not primes.is_circular(999953)
''' import maths primesd = maths.primesd(10**6) primes = [x for x in primesd.keys() if primesd.get(x) is 1] ''' from primes import Primes primes = Primes(10**6) ps = primes.pList() def Euler_50(): high = 0 for i in range(10): sums = 0 x = 0 if i % 10000 == 0: print('new', i) for j in ps[i:]: x += 1 sums += j if sums > 10**6: break if primes.isPrime(sums): if x > high: high = x maxs = sums #;print('high:',high,'sum:',sums,'i:',primes.pList(i)) return maxs if __name__ == '__main__': print(Euler_50())
def button_handle_random(self, event): # 按钮(随机素数)事件 a = Primes(2, 5000, 1000) p = random.choice(a) q = random.choice(a) self.content_P.set("%s" % p) self.content_Q.set("%s" % q)
def empty_Primes(): from primes import Primes new_primes = Primes() return new_primes
def test_primes_slice(): """Test method first returns correct slice.""" from primes import Primes Primes = Primes() assert Primes.first(20)[-5:] == [53, 59, 61, 67, 71]
def test_consecutive_sum_max(self): primes = Primes() assert (2 == primes.consecutive_sum_max(5)) assert (0 == primes.consecutive_sum_max(11)) assert (6 == primes.consecutive_sum_max(41))
def test_prime_80thth_element(): """Test method first returns correct element.""" from primes import Primes Primes = Primes() assert Primes.first(80)[79] == 409
def test_prime_100th_element(): """Test method first returns correct element.""" from primes import Primes Primes = Primes() assert Primes.first(100)[99] == 541
import sys sys.path.append('C:\\Users\\bob\\comp-sci\\project-euler\\toolkit') from primes import Primes p = Primes(1000000) is_prime = p.is_prime p_list = p.primes_list def solve(): most_terms, prime = 0, 0 for terms in range(1, 547): for i in range(len(p_list) - terms): p_sum = sum(p_list[i:i+terms]) if p_sum > 1000000: break if is_prime(p_sum): most_terms, prime = terms, p_sum break return prime
def setUp(self): self.primes = Primes(100)
def test_primes_1000th_prime_is_7919(self): s = Primes(10000) self.assertEqual(s.first(1000)[-1], 7919)
""" The prime factors of 13195 are 5, 7, 13 and 29. What is the largest prime factor of the number 600851475143 ? """ from primes import Primes primes = Primes(10000) print(list(primes.prime_factors((600851475143))))
def test_consecutive_sum_max_length(self): primes = Primes() assert primes.consecutive_sum_max_length(50) == (41, 6)
#!/usr/bin/env python # -*- coding: utf-8 -*- """ What is the smallest odd composite that cannot be written as the sum of a prime and twice a square? """ from primes import Primes _SQ = [i * i << 1 for i in range(100)] primes = Primes() def is_goldbach(n): res = False for i in range(100): t = n - _SQ[i] if t < 2: break if primes.is_prime(t): res = True break return res def pe46(): """ >>> pe46() 5777 """ limit = 10000
import timeit from triangular import count_factors from triangular import gen_triangular_number from primes import Primes i = 1 while True: i +=1 pobj = Primes(i) t = gen_triangular_number(i) factors = count_factors(pobj, t) if factors >= 500: print ("factors", factors, "t", t) break
#!/usr/bin/python3 ''' Primes generator using Sieve of Eratosthenes Use -l to limit output or use Ctrl+C to interrupt. ''' import argparse import sys from primes import Primes argument_parser = argparse.ArgumentParser('Primes generator') argument_parser.add_argument('-l', dest='limit', type=int, default=None) limit = argument_parser.parse_args().limit prime_numbers = Primes() for prime in prime_numbers: if limit and prime > limit: sys.exit() print(prime)
def ListOfPrimes(num): listofPrimenumbers = [] for i in range(2, num): if Primes(i): listofPrimenumbers.append(i) return listofPrimenumbers