1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
|
#!/usr/bin/python3
'''
Week 147:
https://theweeklychallenge.org/blog/perl-weekly-challenge-147
Task #1: Truncatable Primme
Write a script to generate first 20 left-truncatable prime numbers in base 10.
'''
import re
import math
import numpy
import unittest
def is_prime(n):
if (n == 1):
return False
i = 2
while (i <= int(math.sqrt(n))):
if ((n % i) == 0):
return False
i += 1
return True
def left_truncatable_numbers(n):
numbers = []
i = 0
s = str(n)
while (i < len(s)):
numbers.append(int(s[i:]))
i += 1
return numbers
def left_truncatable_primes(count):
ltp = []
c = 0
n = 2
while (c < count):
containZero = re.search('0', str(n))
if ((not containZero) and is_prime(n)):
numbers = left_truncatable_numbers(n)
found = True
if (len(numbers) >= 2):
for i in numbers:
if (not is_prime(i)):
found = False
if (found):
ltp.append(n)
c += 1
n += 1
return ltp
#
#
# Unit test class
class TestTruncatablePrime(unittest.TestCase):
def test_example(self):
exp = [2, 3, 5, 7, 13, 17, 23, 37, 43, 47, 53, 67, 73, 83, 97, 113, 137, 167, 173, 197]
got = left_truncatable_primes(20)
self.assertEqual(numpy.alltrue(exp == got), True, 'Example')
unittest.main()
|