コード例 #1
0
ファイル: euler60.py プロジェクト: sputnick1124/ProjectEuler
def concatp(p1,p2):
    d1=int(log(p1,10)+1)
    d2=int(log(p2,10)+1)
    if not isprime(p1*10**d2+p2):
        return False
    if not isprime(p2*10**d1+p1):
        return False
    return True
コード例 #2
0
def make_prime_list(n):
    prime_list = []
    for i in range(2, n + 1):
        if primes.isprime(i):
            prime_list.append(i)

    return prime_list
コード例 #3
0
def pp():
    start_time = time.time()
    digits='123456789'
    numbers=[]
    for n in product(digits,repeat=4):
        if n[-1] not in '24568' and sum([int(x) for x in n])%3 !=0: 
            numbers.append(int(''.join(n)))
    
    ps=[]
    for number in numbers:
        if isprime(number):
            ps.append(number)

    perms=dict()    
    for prime in ps:
        perm=''.join(sorted(str(prime)))
        if perm in perms:
            perms[perm].append(prime)
        else:
            perms[perm] = [prime]
            
    for x in perms:
        if len(perms[x])<4:
            continue
        d1=[]
        for n in combinations(perms[x],2):
            diff=abs(n[1]-n[0])
            d1.append([n,diff])
            for i in range(len(d1)-1):
                if diff == d1[i][1]:
                    if n[0] in d1[i][0] or n[1] in d1[i][0]:
                        nums=sorted(list(set([n[0],n[1],d1[i][0][0],d1[i][0][1]])))                    
                        concat=str(nums[0])+str(nums[1])+str(nums[2])
                        print n,d1[i][0],diff,concat
    print("--- %s seconds ---" % (time.time() - start_time))
コード例 #4
0
def sumofprimes(n):
    primes = []
    for i in xrange(n):
        if isprime(i):
            primes.append(i)

    return sum(primes)
コード例 #5
0
def run_length(a,b):
    n = 0
    while True:
        #print n
        if isprime(poly(a,b,n)):
            n += 1
        else:
            return n
コード例 #6
0
def sum_of_primes(lista):
    total = 0

    for i in lista:
        if isprime(i):
            total += i

    return total
コード例 #7
0
def is_circular_prime(p):
    rotations = len(str(p))
    prime = deque(str(p))
    for x in range(rotations):
        prime_int = int("".join(prime))
        if not isprime(prime_int):
            return False
        prime.rotate(1)
    return True
コード例 #8
0
ファイル: problem27a.py プロジェクト: jreese/euler
def consecutive_primes(a,b):
    # n^2 + (a*n) + b

    n = 0
    while True:
        p = (n * n) + (a * n) + b
        if not isprime(p):
            return n

        n += 1
コード例 #9
0
ファイル: EulerP46.py プロジェクト: meic/ProjectEuler
def check(n):
        if primes.isprime(n): return (n+2)
        
        x=0
        while primes.prime(x)<n:
                square=math.sqrt((n-primes.prime(x))/2.0)
                if square==int(square):
                        return (n+2)
                x+=1
        print n
コード例 #10
0
    def try_move(self, marker, location):
        # full or past 52
        if (location.occupied or location.label > self.locations[-1].label):
            return
        if primes.isprime(location.label):
            # move up to 6 spaces ahead
            for i in range(1, 6):
                if self.locations[marker.index + i].occupied:
                    marker.index += i - 1  # space before this occupied one

                    return
コード例 #11
0
def get_num_div(cur_num):
    num_div = 1
    factors = []
    for i in range(2, int(np.floor(np.sqrt(cur_num)))):
        if primes.isprime(i):
            factors.append(i)

    powers = []

    ind = 0
    for i in factors:
        j = cur_num
        powers.append(0)
        cur_power = 0
        while j % i == 0:
            j = j / i
            cur_power += 1
        powers[ind] = cur_power
        ind += 1

    for i in powers:
        num_div *= (i + 1)

    return num_div
コード例 #12
0
from time import time
from primes import isprime
##def isprime(p):
##    if not p%2:
##        return False
##    for n in range(3,int(p**.5),2):
##        if not p%n:
##            return False
##    return True

t1 = time()
p = 0
diags = 1
for square in range(3, 99999, 2):
    diags += 4
    for corner in range(1, 4):
        if isprime((square - 2)**2 + corner * (square - 1)):
            p += 1
    if p / diags <= .1:
        print(square)
        break
print(time() - t1)
コード例 #13
0
ファイル: main.py プロジェクト: Prateek937/himanshu
import primes
print(primes.isprime(18))
print(primes.all_primes(18))
print(primes.prime_factors(18))
コード例 #14
0
ファイル: EulerP51b.py プロジェクト: meic/ProjectEuler
contin=1
x=25
while contin:
        prime=[int(i) for i in str(primes.prime(x))]
        for i in range(len(prime)-2):
                for j in range(i+2):
                        for jj in range(j+1):
                                # if jj==0:
                                        # am=Amount+1
                                # else
                                        
                                list2=list(prime)
                                count=0
                                for k in range(10):
                                        list2[i+2]=list2[j+1]=list2[jj]=k
                                        if primes.isprime(listToNum(list2)) and list2[0]!=0:
                                                count+=1
                                                if count==Amount:
                                                        print listToNum(prime)
                                                        print i+2
                                                        print j+1
                                                        print jj
                                                        for k in range(10):
                                                                list2[i+2]=list2[j+1]=list2[jj]=k
                                                                if primes.isprime(listToNum(list2)) and list2[0]!=0:
                                                                        print listToNum(list2)
                                                        contin=0
        x+=1

        
        
コード例 #15
0
ファイル: EulerP41.py プロジェクト: meic/ProjectEuler
import time
import primes
startTime=time.clock()

length =7

n=7654321
contin=1

while True:
        if n%1000==0:print n
        if n<10**5:length =6
        if n<10**4:length =5
        if n<10**3:length =4
        
        contin=1
        for i in range(1,length+1):
                if str(n).count(str(i))!=1:
                        contin=0
                        break
        if contin:
                if primes.isprime(n):
                        print n
                        break
        n-=1
        
        
endTime=time.clock()
print endTime-startTime
コード例 #16
0
from primes import prime_list, isprime, prime_list2
from itertools import product

primes = prime_list2(10000)
composites = [i for i in xrange(3, 10000, 2) if not isprime(i)]
square2 = [2 * i * i for i in xrange(1, 100)]
sums = list(set(sum(c) for c in product(primes, square2) if sum(c) % 2))
sums.sort()
print sums[:25]

print[c for c in composites if not c in sums][:25]

result = False
コード例 #17
0
ファイル: 46.py プロジェクト: firefly431/projecteuler
def isprime(n):
    if n <= max(P):
        return n in P
    return primes.isprime(n)
コード例 #18
0
ファイル: 49.py プロジェクト: sejje/sejje-euler
def check_for_sequence(primelist, start):
    if start + 6660 > 9999:
        return False
    if not start in primelist:
        return False
    if not start + 3330 in primelist:
        return False
    if not start + 6660 in primelist:
        return False
    return True


primelist = []
for i in xrange(1000, 10000):
    if isprime(i):
        primelist.append(i)


def get_starts(primelist):
    results = []
    for i in primelist:
        if check_for_sequence(primelist, i):
            results.append(i)
    return results


def check_permutations(number):
    '''
    Specialized function to see if a number,
    when increased by 3330 is a permutation of itself
コード例 #19
0
 def test_is_prime(self):
     self.assertTrue(primes.isprime(11))
     self.assertTrue(not primes.isprime(10))
コード例 #20
0
ファイル: 49.py プロジェクト: sejje/sejje-euler
from primes import isprime

def check_for_sequence(primelist, start):
    if start + 6660 > 9999:
        return False
    if not start in primelist:
        return False
    if not start + 3330 in primelist:
        return False
    if not start + 6660 in primelist:
        return False
    return True

primelist = []
for i in xrange(1000, 10000):
	if isprime(i):
		primelist.append(i)

def get_starts(primelist):
    results = []
    for i in primelist:
        if check_for_sequence(primelist, i):
            results.append(i)
    return results

def check_permutations(number):
    '''
    Specialized function to see if a number,
    when increased by 3330 is a permutation of itself
    '''
    num2 = number + 3330
コード例 #21
0
ファイル: 27.py プロジェクト: firefly431/projecteuler
import primes, itertools

pcalc = 1000000

Pl = list(primes.sieve(pcalc))
P = set(Pl) # SERIOUS speedup
isprime = lambda x: ((primes.isprime(x)) if (x >= pcalc) else (x in P))

to_1000 = list(itertools.takewhile(lambda x: x < 1000, Pl))

longest = 0
l_a = 0
l_b = 0

lim = 1000

for a in range(-lim + 1, lim):
    for b in to_1000:
        if not isprime(longest * longest + a * longest + b): continue
        for i in itertools.count(1):
            if not isprime(i * i + a * i + b):
                if i + 1 > longest:
                    longest = i + 1
                    l_a = a
                    l_b = b
                break
    if a % 100 == 0:
        print("a = {:>5}, longest so far: ({:>5}, {:>5}) -> {:>5}".format(a, l_a, l_b, longest))

print(l_a * l_b)
コード例 #22
0
ファイル: 7.py プロジェクト: firefly431/projecteuler
def nth(seq, n, default = None):
    import itertools
    return next(itertools.islice(seq, n - 1, None), default)

import itertools
import primes
print(nth((x for x in itertools.count(1) if primes.isprime(x)), 10001))
コード例 #23
0
# project euler 58

from primes import isprime

diagnumber = 1
diagprimes = 0 
diagtotal = 1 # includes center
sidelength = 1 # each level += 2

while True:
	sidelength += 2
	
	for i in range(4):
		diagnumber += sidelength - 1		
		if isprime(diagnumber):
			diagprimes += 1

	diagtotal += 4
	
	if diagprimes / float(diagtotal) < 0.1:
		print sidelength
		break
コード例 #24
0
ファイル: 37.py プロジェクト: sejje/sejje-euler
def check_prime(list):
	#ensure all the members of a list are prime
	if all(isprime(int(number)) for number in list):
		return True
	return False
コード例 #25
0
ファイル: EulerP51.py プロジェクト: meic/ProjectEuler
        for i in range(len(mylist)):
                sum+= mylist[-1-i]*10**i
        return sum
        
##for 2 digits
contin=1
x=10
while contin:
        prime=[int(i) for i in str(primes.prime(x))]
        for i in range(len(prime)-1):
                for j in range(i+1):
                        list2=list(prime)
                        count=0
                        for k in range(10):
                                list2[i+1]=list2[j]=k
                                if primes.isprime(listToNum(list2)) and listToNum(list2)>999:
                                        count+=1
                                        if count==Amount:
                                                print listToNum(prime)
                                                contin=0
        x+=1
        
##for 3 digits
contin=1
x=25
while contin:
        prime=[int(i) for i in str(primes.prime(x))]
        for i in range(len(prime)-2):
                for j in range(i+2):
                        for jj in range(j+1):
                                list2=list(prime)
コード例 #26
0
ファイル: 51.py プロジェクト: firefly431/projecteuler
import primes
import itertools
import sys

Pl = primes.precomp(1000000)

i = 0

for p in Pl:
    i = i + 1
    if p == 121313:
        print(p)
    s = str(p)
    for a in '012':
        nn = 10
        fam = []
        for b in '0123456789':
            rr = s.replace(a, b)
            if rr[0] == '0': break
            if rr == s and a != b: break
            if not primes.isprime(int(rr)):
                nn -= 1
                if nn < 8:
                    break
            else:
                fam.append(int(rr))
        else:
            print(p)
            print(fam)
            sys.exit(0)
コード例 #27
0
ファイル: 37.py プロジェクト: sejje/sejje-euler
def check_prime(list):
    #ensure all the members of a list are prime
    if all(isprime(int(number)) for number in list):
        return True
    return False
コード例 #28
0
ファイル: 41.py プロジェクト: sejje/sejje-euler
from primes import isprime
from eulertools import is_pandigital

import time
start = time.time()
record = 0
for number in xrange(1, 7654322):
	if is_pandigital(number):
		if isprime(number):
			record = number
print record, time.time() - start
コード例 #29
0
# Finds the primitive roots between 10 and 50 for primes between 1000 and 9999
import primes
import sys

p = input('Input your prime number: ')
if (p < 1000 or p > 9999):
    print 'Only finds primitive roots for primes on interval [1000,9999]'
    sys.exit(0)
if (primes.isprime(p) == 0):
    print '%i is NOT prime' % (p)
    sys.exit(0)
primroots = []
ordp = range(1, p)
for a in range(10, 51):
    orda = []
    for i in range(1, p):
        orda.append(pow(a, i, p))
    orda.sort()
    if orda == ordp:
        primroots.append(a)
print 'The primitive roots of %i on the interval [10,50] are %s' % (p,
                                                                    primroots)
コード例 #30
0
ファイル: EulerP37.py プロジェクト: meic/ProjectEuler
count=0
sum =0
tprimes=[]

while count < 1000000000000000:
        primeList=[int(x) for x in str(primes.prime(n))]
        good=1
        for x in range(1,len(primeList)):
                primeL=0
                primeR=0
                
                for i in range(len(primeList)-x):
                        # print primeList
                        primeL+=(10**(len(primeList)-x-i-1))*primeList[x+i]
                        primeR+=(10**(len(primeList)-x-i-1))*primeList[i]
                        # print primeR
                if not (primes.isprime(primeL) and primes.isprime(primeR)):
                        good=0
                        break
        if good:
                tprimes.append(primes.prime(n))
                count +=1
                sum += primes.prime(n)
                print tprimes
                print sum
        
        n+=1
print tprimes
print sum
endTime=time.clock()
print endTime-startTime
コード例 #31
0
import primes

l_numprimes=[]
for a in range(-1000,1000):
	print a
	for b in range(-1000,1000):
		n = 0
		while(True):
			if(primes.isprime(n**2+a*n+b)):
				n+=1
			else:
				l_numprimes.append((n,a,b))
				break
l_numprimes.sort(reverse=True)
print l_numprimes[0]

"""
First time through, brute force approach.
Go from -1000 to 1000 in a and b.
Check n while it's prime.

Spun for awhile, printing a each time.

Oh - had an infinite while loop. Added a break to the else.
Much faster :)

Changed sort to reverse = True.
Got 71 consecutive primes, which is less than the 80 consecutive primes 
from -79 and 1601. 

Let's try it, I guess. (oh 1601 > 1000). Correct!
コード例 #32
0
ファイル: 46.py プロジェクト: sejje/sejje-euler
from primes import prime_list, isprime, prime_list2
from itertools import product

primes = prime_list2(10000)
composites = [i for i in xrange(3, 10000, 2) if not isprime(i)]
square2 = [2 * i * i for i in xrange(1, 100)]
sums = list(set(sum(c) for c in product(primes, square2) if sum(c) % 2))
sums.sort()
print sums[:25]

print [c for c in composites if not c in sums][:25]

result = False
コード例 #33
0
ファイル: EulerP60.py プロジェクト: meic/ProjectEuler
def isPrimeJoin(x,y):
        return (primes.isprime(x*10**(len(str(y)))+y) and primes.isprime(y*10**(len(str(x)))+x))
コード例 #34
0
 def test_is_five_prime(self):
     """Is five successfully determined to be prime?"""
     self.assertTrue(isprime(5))
コード例 #35
0
ファイル: EulerP50.py プロジェクト: meic/ProjectEuler
import time
import primes
startTime=time.clock()

n=0
MAX=10**6
noPrimes=0
x=0

while primes.prime(x)<MAX/2:
        sum=primes.prime(x)
        n=1
        while sum<MAX:
                sum+=primes.prime(x+n)
                n+=1
                if primes.isprime(sum):
                        if n>noPrimes:
                                noPrimes=n
                                print noPrimes
                                print sum
        x+=1

endTime=time.clock()
print endTime-startTime
コード例 #36
0
# project euler 41

from primes import isprime

def ispandigital(n):
	return all([False for i in range(len(n)) if n.find(str(i+1)) == -1])

for i in range(7654321, 1234567 - 1, -2):
	if ispandigital(str(i)) and isprime(i):
		print i
		break
	
コード例 #37
0
import primes
import numpy as np

range_a = range(-999,1000)
range_b = range(-1000,1001)

max_num_primes = 0

for a in range_a:
    for b in range_b:
        cur_max_num = 0
        n = 0
        while primes.isprime(n*n + a*n + b):
                cur_max_num += 1
                n += 1

        if cur_max_num > max_num_primes:
            max_num_primes = cur_max_num
            max_prod = a*b
            a_max = a
            b_max = b


print(max_num_primes)
print(a_max,b_max)
print(a_max*b_max)

コード例 #38
0
import primes

i = 3
sum = 2

while i < 2e6:
    if (primes.isprime(i)):
        sum += i
    i += 2

print(sum)

コード例 #39
0
ファイル: EulerP49.py プロジェクト: meic/ProjectEuler
import time
import permute
import primes
startTime=time.clock()

oneper=(9997-1000)/100

for i in range(1000,9997):
        if i%oneper==0:print i/oneper
        for j in range(1,(9999-i)/2+1):
                if primes.isprime(i) and primes.isprime(i+j) and primes.isprime(i+2*j):
                        if permute.isPerm([int(ch) for ch in str(i)],[int(ch) for ch in str(i+j)]) and permute.isPerm([int(ch) for ch in str(i)],[int(ch) for ch in str(i+2*j)]):
                                print i
                                print i+j
                                print i+2*j
                


endTime=time.clock()
print endTime-startTime
コード例 #40
0
ファイル: 58.py プロジェクト: firefly431/projecteuler
from itertools import count
from primes import isprime

n = 1
c = 0
for i in count(1, 2):
    n += i
    # skip bottom right (not actually diagonal)
    n += i
    c += isprime(n)
    i += 1
    n += i
    c += isprime(n)
    n += i
    c += isprime(n)
    # side length is i + 1
    # number of numbers is i * 2 + 1
    # c / (i * 2 - 1) < .1
    # so 10c < i * 2 - 1
    if 10 * c < i * 2 + 1:
        print(i + 1)
        break
コード例 #41
0
ファイル: 41.py プロジェクト: firefly431/projecteuler
import primes
import itertools
import sys
for i in reversed(range(1, 10)):
    for perm in itertools.permutations(reversed('123456789'[:i])):
        perm = ''.join(perm)
        if primes.isprime(int(perm)):
            print(perm)
            sys.exit(0)