I am writing a program that computes
$$n-n \cdot \left(\prod_{i=1}^n (1-p_i)\right)$$$$n-n \cdot \left(\prod_{i=1}^n (1-\frac{1}{p_i})\right)$$
which is rewritten in my code as:
$$\left(1-\left(\prod_{i=1}^n(1-p_i)\right)\right) \cdot n$$$$\left(1-\left(\prod_{i=1}^n(1-\frac{1}{p_i})\right)\right) \cdot n$$
There are lots of primes involved here especially as \$n\$ gets larger and larger. I do not want to use Atkin's method for generating them since my teacher and I will probably lose oversight as to what is going on, but would still like to optimize my algorithm for speed and accuracy (not sure if the latter can be better).
i = 0
j = 3
old = 1.0
primes = [2]
while True:
if (j>240000): break
cont = True
enumerator = 0
for e in primes:
if j%e==0: cont = False
if enumerator>=len(primes)/2 + 1: break
enumerator += 1
if cont: primes.append(j)
j+=2
#print primes
while True:
if (i>len(primes)-1): break
old = old * (1 - 1.0/primes[i])
print old
i+=1;
primeslessthan = j-1
amta = 1-old
print "The convergence: " + str(primeslessthan)
print "All the way up to the number: " + str(amta)
print "The amount of active inhibitors are: " + str((1-amta)*primeslessthan)
I am open to multithreading, and to translating this to a different language like C++, but do not know what optimizations I could make there either.