fanwer
fanwer

Reputation: 13

Python code of finding random prime numbers using Parallel Miller-Rabin Algorithm

I am writing python code using parallel processing for random prime no generation. I am using Miller Rabin Algorithm to check prime nos. The parallel python code suppose to run fast as compare to non-parallel python code, but this is not the case. Parallel processing is taking so much time. Here is my python code:

def is_prime(n, k=40):
    if n == 2 or n == 3:
        return True
    if n <= 1 or n % 2 == 0:
        return False
    # find r and s
    s = 0
    r = n - 1
    while r & 1 == 0:
        s += 1
        r //= 2
    flag=1
    jobs=[]
    event = multiprocessing.Event()
    for i in range(40):
        p = multiprocessing.Process(target=primetest,args=(s,r,n,event))
        p.start()
        jobs.append(p)
    while True:
        if event.is_set():
            flag=0
            for i in jobs:             # terminating all jobs when event is set
                Terminate each process  
                i.terminate()
            break
        else:
            flag=1
            break
            
    if flag==0:
        p.join()
        p.close()
        return False
    else:
        p.join()
        p.close()
        return True

def primetest(s,r,n,event):
    a = randrange(2, n - 1)
    v = pow(a, r, n)
    if v != 1: # this test does not apply if v is 1.
        i = 0
        while v != (n - 1):
            if i == s - 1:
                #print("value of n",n)
                event.set()
                return False
            else:
                i = i + 1
                v = (v ** 2) % n  

Upvotes: 1

Views: 237

Answers (0)

Related Questions