Data commit
This commit is contained in:
parent
7387c8f97b
commit
cb5bb5e222
199093 changed files with 3378972 additions and 0 deletions
49
Task/Long-primes/Python/long-primes.py
Normal file
49
Task/Long-primes/Python/long-primes.py
Normal file
|
|
@ -0,0 +1,49 @@
|
|||
def sieve(limit):
|
||||
primes = []
|
||||
c = [False] * (limit + 1) # composite = true
|
||||
# no need to process even numbers
|
||||
p = 3
|
||||
while True:
|
||||
p2 = p * p
|
||||
if p2 > limit: break
|
||||
for i in range(p2, limit, 2 * p): c[i] = True
|
||||
while True:
|
||||
p += 2
|
||||
if not c[p]: break
|
||||
|
||||
for i in range(3, limit, 2):
|
||||
if not c[i]: primes.append(i)
|
||||
return primes
|
||||
|
||||
# finds the period of the reciprocal of n
|
||||
def findPeriod(n):
|
||||
r = 1
|
||||
for i in range(1, n): r = (10 * r) % n
|
||||
rr = r
|
||||
period = 0
|
||||
while True:
|
||||
r = (10 * r) % n
|
||||
period += 1
|
||||
if r == rr: break
|
||||
return period
|
||||
|
||||
primes = sieve(64000)
|
||||
longPrimes = []
|
||||
for prime in primes:
|
||||
if findPeriod(prime) == prime - 1:
|
||||
longPrimes.append(prime)
|
||||
numbers = [500, 1000, 2000, 4000, 8000, 16000, 32000, 64000]
|
||||
count = 0
|
||||
index = 0
|
||||
totals = [0] * len(numbers)
|
||||
for longPrime in longPrimes:
|
||||
if longPrime > numbers[index]:
|
||||
totals[index] = count
|
||||
index += 1
|
||||
count += 1
|
||||
totals[-1] = count
|
||||
print('The long primes up to 500 are:')
|
||||
print(str(longPrimes[:totals[0]]).replace(',', ''))
|
||||
print('\nThe number of long primes up to:')
|
||||
for (i, total) in enumerate(totals):
|
||||
print(' %5d is %d' % (numbers[i], total))
|
||||
Loading…
Add table
Add a link
Reference in a new issue