Investigations into the frequency and occurence of prime numbers.

The following program requires a text file named primes_list.txt to be in the same directory as the .ipynb file which in this case is named PrimeInvestigation.ipynb. The file primes_list.txt must be a list of consecutive prime numbers with no space or punctuation separated by a carriage return after each number. It is fine to start with 2 as the first line and nothing else.


In [21]:
#Creates a list of integers from numbers in file primes_list.txt 
with open("./primes_list.txt", "r") as f:
    lines = f.readlines()

prime = [int(e.strip()) for e in lines]

def test_prime(candidate):
    """
    Takes an argument which must be a positive integer and returns True 
    if it is prime False if it isn't. Will only work on numbers not more than
    twice the size of the largest prime in primes_list.txt  
    """    
    for i in prime:
        #The number is not prime if it is evenly divided.
        if candidate % i == 0:
            return False
            break
        #If the number is not divisible by any prime number less than half it's size it is prime.
        #Add it to the list of prime numbers.
        elif i > candidate / 2:
            write_prime(candidate)    
            return True

    
def write_prime(candidate):
    """
    Appends the value of the variable candidate to the list called prime.
    """
    prime.append(candidate)  

def find_prime(hmny_more):
    """
    Takes an argument which should be an int. It takes the last element of the list prime and adds 1 to
    it and passes it to the function test_prime(candidate). It then adds one and repeats as many times as 
    the integer argument.
    """
    print 'Welcome to Prime Finder! The largest prime catalogued so far is ', prime[-1]
    candidate = prime[-1]
    for i in range(hmny_more):
        candidate += 1
        test_prime(candidate)
    return "Done. The largest prime catalogued on this run was", prime[-1]
        
def frequencyPrime(frequency):
    count = 0
    hundreds = frequency

    for i in prime:
        compare = int(i)
        if compare < hundreds:
            count += 1
            #print i
        else:
            print hundreds - frequency, "-", hundreds, ":", count
            hundreds += frequency
            count = 0

       
#number = int(raw_input('How many more numbers would you like to check for primacy?: '))
#number = 100000
#find_prime(number)
#print prime

with open("./primes_list.txt", 'w') as f:
    f.write("\n".join(map(str,prime)))

In [19]:
find_prime(1000)


Welcome to Prime Finder! The largest prime catalogued so far is  2
Out[19]:
('Done. The largest prime catalogued on this run was ', 997)

In [17]:
prime


Out[17]:
[2,
 3,
 5,
 7,
 11,
 13,
 17,
 19,
 23,
 29,
 31,
 37,
 41,
 43,
 47,
 53,
 59,
 61,
 67,
 71,
 73,
 79,
 83,
 89,
 97,
 101,
 103,
 107,
 109,
 113,
 127,
 131,
 137,
 139,
 149,
 151,
 157,
 163,
 167,
 173,
 179,
 181,
 191,
 193,
 197,
 199,
 211,
 223,
 227,
 229,
 233,
 239,
 241,
 251,
 257,
 263,
 269,
 271,
 277,
 281,
 283,
 293,
 307,
 311,
 313,
 317,
 331,
 337,
 347,
 349,
 353,
 359,
 367,
 373,
 379,
 383,
 389,
 397,
 401,
 409,
 419,
 421,
 431,
 433,
 439,
 443,
 449,
 457,
 461,
 463,
 467,
 479,
 487,
 491,
 499,
 503,
 509,
 521,
 523,
 541,
 547,
 557,
 563,
 569,
 571,
 577,
 587,
 593,
 599,
 601,
 607,
 613,
 617,
 619,
 631,
 641,
 643,
 647,
 653,
 659,
 661,
 673,
 677,
 683,
 691,
 701,
 709,
 719,
 727,
 733,
 739,
 743,
 751,
 757,
 761,
 769,
 773,
 787,
 797,
 809,
 811,
 821,
 823,
 827,
 829,
 839,
 853,
 857,
 859,
 863,
 877,
 881,
 883,
 887,
 907,
 911,
 919,
 929,
 937,
 941,
 947,
 953,
 967,
 971,
 977,
 983,
 991,
 997]

In [9]:
count = 0
hundreds = 1000

for i in prime:
    compare = int(i)
    if compare < hundreds:
        count += 1
        #print i
    else:
        print hundreds - 1000, "-", hundreds, ":", count
        hundreds += 1000
        count = 0


0 - 1000 : 168
1000 - 2000 : 134
2000 - 3000 : 126
3000 - 4000 : 119
4000 - 5000 : 118
5000 - 6000 : 113
6000 - 7000 : 116
7000 - 8000 : 106
8000 - 9000 : 109
9000 - 10000 : 111
10000 - 11000 : 105
11000 - 12000 : 102
12000 - 13000 : 108
13000 - 14000 : 104
14000 - 15000 : 101
15000 - 16000 : 107
16000 - 17000 : 97
17000 - 18000 : 103
18000 - 19000 : 93
19000 - 20000 : 103
20000 - 21000 : 97
21000 - 22000 : 103
22000 - 23000 : 99
23000 - 24000 : 103
24000 - 25000 : 93
25000 - 26000 : 97
26000 - 27000 : 100
27000 - 28000 : 93
28000 - 29000 : 97
29000 - 30000 : 91
30000 - 31000 : 94
31000 - 32000 : 91
32000 - 33000 : 105
33000 - 34000 : 99
34000 - 35000 : 93
35000 - 36000 : 91
36000 - 37000 : 98
37000 - 38000 : 93
38000 - 39000 : 89
39000 - 40000 : 95
40000 - 41000 : 87
41000 - 42000 : 100
42000 - 43000 : 101
43000 - 44000 : 84
44000 - 45000 : 95
45000 - 46000 : 85
46000 - 47000 : 89
47000 - 48000 : 94
48000 - 49000 : 88
49000 - 50000 : 97
50000 - 51000 : 88
51000 - 52000 : 96
52000 - 53000 : 88
53000 - 54000 : 91
54000 - 55000 : 89
55000 - 56000 : 92
56000 - 57000 : 98
57000 - 58000 : 90
58000 - 59000 : 89
59000 - 60000 : 93
60000 - 61000 : 87
61000 - 62000 : 86
62000 - 63000 : 87
63000 - 64000 : 92
64000 - 65000 : 79
65000 - 66000 : 97
66000 - 67000 : 83
67000 - 68000 : 98
68000 - 69000 : 79
69000 - 70000 : 80
70000 - 71000 : 97
71000 - 72000 : 94
72000 - 73000 : 89
73000 - 74000 : 82
74000 - 75000 : 91
75000 - 76000 : 90
76000 - 77000 : 82
77000 - 78000 : 94
78000 - 79000 : 83
79000 - 80000 : 90
80000 - 81000 : 87
81000 - 82000 : 91
82000 - 83000 : 88
83000 - 84000 : 83
84000 - 85000 : 86
85000 - 86000 : 84
86000 - 87000 : 87
87000 - 88000 : 92
88000 - 89000 : 75
89000 - 90000 : 93
90000 - 91000 : 88
91000 - 92000 : 84
92000 - 93000 : 96
93000 - 94000 : 85
94000 - 95000 : 86
95000 - 96000 : 94
96000 - 97000 : 83
97000 - 98000 : 81
98000 - 99000 : 86
99000 - 100000 : 86
100000 - 101000 : 80
101000 - 102000 : 92
102000 - 103000 : 86
103000 - 104000 : 79
104000 - 105000 : 90
105000 - 106000 : 81
106000 - 107000 : 91
107000 - 108000 : 75
108000 - 109000 : 90
109000 - 110000 : 87
110000 - 111000 : 82
111000 - 112000 : 83
112000 - 113000 : 80
113000 - 114000 : 87
114000 - 115000 : 81
115000 - 116000 : 92
116000 - 117000 : 80
117000 - 118000 : 89
118000 - 119000 : 78
119000 - 120000 : 86
120000 - 121000 : 87
121000 - 122000 : 85
122000 - 123000 : 87
123000 - 124000 : 87
124000 - 125000 : 82
125000 - 126000 : 83
126000 - 127000 : 82
127000 - 128000 : 85
128000 - 129000 : 88
129000 - 130000 : 82
130000 - 131000 : 84
131000 - 132000 : 82
132000 - 133000 : 86
133000 - 134000 : 81
134000 - 135000 : 79
135000 - 136000 : 88
136000 - 137000 : 95
137000 - 138000 : 79
138000 - 139000 : 84
139000 - 140000 : 83
140000 - 141000 : 86
141000 - 142000 : 86
142000 - 143000 : 81
143000 - 144000 : 76
144000 - 145000 : 78
145000 - 146000 : 84
146000 - 147000 : 83
147000 - 148000 : 82
148000 - 149000 : 82
149000 - 150000 : 90
150000 - 151000 : 84
151000 - 152000 : 89
152000 - 153000 : 87
153000 - 154000 : 76
154000 - 155000 : 83
155000 - 156000 : 84
156000 - 157000 : 75
157000 - 158000 : 87
158000 - 159000 : 76
159000 - 160000 : 84
160000 - 161000 : 84
161000 - 162000 : 83
162000 - 163000 : 80
163000 - 164000 : 82
164000 - 165000 : 76
165000 - 166000 : 79
166000 - 167000 : 80
167000 - 168000 : 82
168000 - 169000 : 72
169000 - 170000 : 86
170000 - 171000 : 86
171000 - 172000 : 80
172000 - 173000 : 88
173000 - 174000 : 78
174000 - 175000 : 82
175000 - 176000 : 74
176000 - 177000 : 94
177000 - 178000 : 72
178000 - 179000 : 88
179000 - 180000 : 93
180000 - 181000 : 70
181000 - 182000 : 78
182000 - 183000 : 90
183000 - 184000 : 78
184000 - 185000 : 82
185000 - 186000 : 90
186000 - 187000 : 78
187000 - 188000 : 86
188000 - 189000 : 79
189000 - 190000 : 87
190000 - 191000 : 74
191000 - 192000 : 80
192000 - 193000 : 88
193000 - 194000 : 83
194000 - 195000 : 73
195000 - 196000 : 84
196000 - 197000 : 75
197000 - 198000 : 86
198000 - 199000 : 85

In [ ]:


In [10]:
count = 0
hundreds = 10000

for i in prime:
    compare = int(i)
    if compare < hundreds:
        count += 1
        #print i
    else:
        print hundreds - 10000, "-", hundreds, ":", count
        hundreds += 10000
        count = 0


0 - 10000 : 1229
10000 - 20000 : 1032
20000 - 30000 : 982
30000 - 40000 : 957
40000 - 50000 : 929
50000 - 60000 : 923
60000 - 70000 : 877
70000 - 80000 : 901
80000 - 90000 : 875
90000 - 100000 : 878
100000 - 110000 : 860
110000 - 120000 : 847
120000 - 130000 : 857
130000 - 140000 : 850
140000 - 150000 : 837
150000 - 160000 : 834
160000 - 170000 : 813
170000 - 180000 : 844
180000 - 190000 : 827

In [ ]:


In [12]:


In [14]:
frequencyPrime(2000)


0 - 2000 : 303
2000 - 4000 : 246
4000 - 6000 : 232
6000 - 8000 : 223
8000 - 10000 : 221
10000 - 12000 : 208
12000 - 14000 : 213
14000 - 16000 : 209
16000 - 18000 : 201
18000 - 20000 : 197
20000 - 22000 : 201
22000 - 24000 : 203
24000 - 26000 : 191
26000 - 28000 : 194
28000 - 30000 : 189
30000 - 32000 : 186
32000 - 34000 : 205
34000 - 36000 : 185
36000 - 38000 : 192
38000 - 40000 : 185
40000 - 42000 : 188
42000 - 44000 : 186
44000 - 46000 : 181
46000 - 48000 : 184
48000 - 50000 : 186
50000 - 52000 : 185
52000 - 54000 : 180
54000 - 56000 : 182
56000 - 58000 : 189
58000 - 60000 : 183
60000 - 62000 : 174
62000 - 64000 : 180
64000 - 66000 : 177
66000 - 68000 : 182
68000 - 70000 : 160
70000 - 72000 : 192
72000 - 74000 : 172
74000 - 76000 : 182
76000 - 78000 : 177
78000 - 80000 : 174
80000 - 82000 : 179
82000 - 84000 : 172
84000 - 86000 : 171
86000 - 88000 : 180
88000 - 90000 : 169
90000 - 92000 : 173
92000 - 94000 : 182
94000 - 96000 : 181
96000 - 98000 : 165
98000 - 100000 : 173
100000 - 102000 : 173
102000 - 104000 : 166
104000 - 106000 : 172
106000 - 108000 : 167
108000 - 110000 : 178
110000 - 112000 : 166
112000 - 114000 : 168
114000 - 116000 : 174
116000 - 118000 : 170
118000 - 120000 : 165
120000 - 122000 : 173
122000 - 124000 : 175
124000 - 126000 : 166
126000 - 128000 : 168
128000 - 130000 : 171
130000 - 132000 : 167
132000 - 134000 : 168
134000 - 136000 : 168
136000 - 138000 : 175
138000 - 140000 : 168
140000 - 142000 : 173
142000 - 144000 : 158
144000 - 146000 : 163
146000 - 148000 : 166
148000 - 150000 : 173
150000 - 152000 : 174
152000 - 154000 : 164
154000 - 156000 : 168
156000 - 158000 : 163
158000 - 160000 : 161
160000 - 162000 : 168
162000 - 164000 : 163
164000 - 166000 : 156
166000 - 168000 : 163
168000 - 170000 : 159
170000 - 172000 : 167
172000 - 174000 : 167
174000 - 176000 : 157
176000 - 178000 : 167
178000 - 180000 : 182
180000 - 182000 : 149
182000 - 184000 : 169
184000 - 186000 : 173
186000 - 188000 : 165
188000 - 190000 : 167
190000 - 192000 : 155
192000 - 194000 : 172
194000 - 196000 : 158
196000 - 198000 : 162

In [ ]: