from primes import mr import time from itertools import permutations import string START = time.time() #sum from 1 to 8 = 36, sum from 1 to 9 is 45, so if we went from 1 to 8 or 1 to 9, it would be divisible by 3. permutation = permutations(['1', '2', '3', '4', '5', '6', '7'], 7) maxz = 0 for perm in permutation: n = int(string.join(perm, '')) if n > maxz and mr(n): maxz = n print maxz print "Time Taken:", time.time() - START
import time from primes import mr start = time.time() lst = [i**3 for i in xrange(1,578)] candidates = set() for i in xrange(1,len(lst)): for j in xrange(i-1,-1,-2): candidates.add(lst[i]-lst[j]) if lst[i] -lst[j] > 10**6: break print len(candidates) count = 0 for val in candidates: if mr(val): count+= 1 print count print "Time Taken: ", time.time() - start """ ~/Desktop/python_projects/proj_euler $python prob131.py 4527 173 Time Taken: 0.131557941437 We only need to go up to 577 n^2(n+p) n is cube (since n+p can't turn n^2 into a cube)
import time START = time.time() from primes import mr mult = 1111111111 successes = set() sumz = 0 for big_dig in xrange(9,0,-1): n = big_dig * mult for dig in xrange(0,10): for diff in xrange(big_dig-9,big_dig+1): m = n - diff*10**dig if mr(m) and m > 10**9: successes.add(big_dig) sumz += m print "Digits we've seen:", successes print "Time taken:", time.time() - START for big_dig in xrange(9,0,-1): if big_dig in successes: continue n = big_dig * mult for dig,dig2 in ((a,b) for a in xrange(10) for b in xrange(a)): for diff,diff2 in ((d1,d2) for d1 in xrange(big_dig-9,big_dig+1) for d2 in xrange(big_dig-9,big_dig+1)): m = n - diff*10**dig - diff2*10**dig2 if mr(m) and m > 10**9: successes.add(big_dig) sumz += m print "Digits we've seen:", successes print "Time taken:", time.time() - START
import time START = time.time() from primes import mr sumz = 0 count = 0 SIZE = 150 * 10**6 not_p = [11, 17, 19, 21, 23] for i in xrange(3, 28): a = i**2 if all([mr(k) for k in [a + 1, a + 3, a + 7, a + 9, a + 13, a + 27]]): count += 1 sumz += i print i for i in xrange(30, SIZE, 10): if i % 3 == 0 or i % 7 == 0 or i % 13 == 0: continue a = i**2 if all([mr(k) for k in [a + 1, a + 3, a + 7, a + 9, a + 13, a + 27]]): if not any([mr(a + j) for j in not_p]): count += 1 sumz += i print i print sumz, count print "Time Taken:", time.time() - START """ 676333270 12 Time Taken: 226.555887938
from primes import mr import time START = time.time() #the four diagonals are 4n^2-2n+1, 4n^2+1,4n^2+2n+1, # and (2n+1)^2 count = 0 for i in range(1, 100000): a = 4 * i * i + 1 j = 2 * i count += mr(a + j) + mr(a) + mr(a - j) if count * 1.0 / (4 * i + 1) < .1: break print j + 1, count / (j * 2.0 + 1) print "Time taken:", time.time() - START """ LOL. I revisited this problem on 1/20/2013. I ran it with the original prime checking algorithm, then I ran it with the miller rabin primality test. Original time: Time taken: 31.7114129066 New time: Time taken: 0.593687772751 looks like I cleaned up my code a bit more since then haha... 3/25/14 Time taken: 0.185644865036 """
a_lst = range(-1, -1000, -2) b_lst = primes[12:168] a_lst2 = [] b_lst2 = [] maxz = 0 for a in a_lst: for b in b_lst: n = 1 while True: if n**2 + n * a + b < 0: # We're no longer dealing with positive composite numbers break elif not mr( n ): # Honestly, I don't remember why I had this condition... n += 1 elif mr(n**2 + n * a + b): #If the result is a prime, keep going n += 1 else: break if 40 < n: maxz = n - 1 #print maxz, a, b a_lst2 += [a] b_lst2 += [b] #print 'ON TO PHASE 2. YAY!' maxz = 0 max_values = (0, 0)
import time, string START = time.time() from itertools import permutations from primes import mr digits = [str(i) for i in range(1, 10)] prime_sets = [set() for i in range(10)] SIZE_LIM = 9 for num_dig in range(1, SIZE_LIM): for perm in permutations(digits, num_dig): next_num = int(string.join(perm, '')) if mr(next_num): prime_sets[num_dig].add(next_num) print num_dig, len(prime_sets[num_dig]) prime_lst = sorted(prime_sets) print "Time Taken:", time.time() - START def get_next(seen, max_size, last_seen): if max_size == 0 and len(seen) == 9: return 1 elif max_size == 0: return 0 sumz = 0 for prime in prime_sets[max_size]: if prime > last_seen: #Since we're not requiring that the num_digs goes down, we still need some ordering to avoid double counting. continue new_set = set(seen)
import time, string START = time.time() from itertools import permutations from primes import mr digits = [str(i) for i in range(1,10)] prime_sets = [set() for i in range(10)] SIZE_LIM = 9 for num_dig in range(1,SIZE_LIM): for perm in permutations(digits,num_dig): next_num = int(string.join(perm,'')) if mr(next_num): prime_sets[num_dig].add(next_num) print num_dig, len(prime_sets[num_dig]) prime_lst = sorted(prime_sets) print "Time Taken:", time.time() - START def get_next(seen,max_size, last_seen): if max_size == 0 and len(seen) == 9: return 1 elif max_size == 0: return 0 sumz = 0 for prime in prime_sets[max_size]: if prime > last_seen: #Since we're not requiring that the num_digs goes down, we still need some ordering to avoid double counting. continue new_set = set(seen)
import time from primes import mr start = time.time() lst = [i**3 for i in xrange(1, 578)] candidates = set() for i in xrange(1, len(lst)): for j in xrange(i - 1, -1, -2): candidates.add(lst[i] - lst[j]) if lst[i] - lst[j] > 10**6: break print len(candidates) count = 0 for val in candidates: if mr(val): count += 1 print count print "Time Taken: ", time.time() - start """ ~/Desktop/python_projects/proj_euler $python prob131.py 4527 173 Time Taken: 0.131557941437 We only need to go up to 577 n^2(n+p) n is cube (since n+p can't turn n^2 into a cube) p+n is cube
from primes import mr import time START = time.time() #the four diagonals are 4n^2-2n+1, 4n^2+1,4n^2+2n+1, # and (2n+1)^2 count = 0 for i in range(1,100000): a = 4 * i*i +1 j = 2* i count += mr(a+j) + mr(a) + mr(a-j) if count * 1.0 / (4*i+1) < .1: break print j+1, count / (j*2.0+1) print "Time taken:", time.time() - START """ LOL. I revisited this problem on 1/20/2013. I ran it with the original prime checking algorithm, then I ran it with the miller rabin primality test. Original time: Time taken: 31.7114129066 New time: Time taken: 0.593687772751 looks like I cleaned up my code a bit more since then haha... 3/25/14 Time taken: 0.185644865036 """
a_lst = range(-1,-1000,-2) b_lst = primes[12:168] a_lst2 = [] b_lst2 = [] maxz = 0 for a in a_lst: for b in b_lst: n = 1 while True: if n**2 + n*a + b < 0: # We're no longer dealing with positive composite numbers break elif not mr(n): # Honestly, I don't remember why I had this condition... n+=1 elif mr(n**2 + n*a + b): #If the result is a prime, keep going n+=1 else: break if 40 < n: maxz = n-1 #print maxz, a, b a_lst2 += [a] b_lst2 += [b] #print 'ON TO PHASE 2. YAY!' maxz = 0 max_values = (0,0) for i in range(0,len(a_lst2)): n = 1
import sys size = 10**6 if len(sys.argv) > 1: size = int(sys.argv[1]) lst = bitarray('0' * (size+1)) count = 0 for i in xrange(2,size+1): if i%10240 == 0: print i if lst[i] == 0: if not mr(2*i*i - 1): if i < size//500: a = set(factor(2*i**2-1)[:-1]) for j in a: for k in xrange((-i)%j+j,size+1,j): lst[k] = 1 for k in xrange(i,size+1,j): lst[k] = 1 count +=1 else: count +=1 print size -1 - count print "Time Taken:", time.time() - start
from primes import mr import time from itertools import permutations import string START = time.time() #sum from 1 to 8 = 36, sum from 1 to 9 is 45, so if we went from 1 to 8 or 1 to 9, it would be divisible by 3. permutation = permutations(['1','2','3','4','5','6','7'],7) maxz = 0 for perm in permutation: n = int(string.join(perm, '')) if n > maxz and mr(n): maxz = n print maxz print "Time Taken:", time.time() -START