Primality test function doesn't work on large numbers?

Eugene Wissner via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Sun Jan 8 01:37:08 PST 2017


On Sunday, 8 January 2017 at 07:52:33 UTC, Elronnd wrote:
> I'm working on writing an RSA implementation, but I've run into 
> a roadblock generating primes.  With a more than 9 bits, my 
> program either hangs for a long time (utilizing %100 CPU!) or 
> returns a composite number.  With 9 or fewer bits, I get 
> primes, but I have to run with a huge number of iterations to 
> actually _get_ a random number.  It runs fast, though.  Why 
> might this be?  Code: http://lpaste.net/1034777940820230144

I haven't read your code very exactly, but I have an assumption 
and you can check if it is helpful:)

I think your actual problem is this line:

z = pow(b, m) % integer;

If it does what I think, it can be horribly slow and memory 
consuming. You have to implement your own pow function that does 
a ^ b mod c. Look into python source code or in "tanya" (D): 
https://github.com/caraus-ecms/tanya/blob/master/source/tanya/math/package.d. It is the same algorithm that phobos uses but with modulo operation built-in and a bit differently written (my code is based neither on python nor on phobos and uses a different bigint implementation). You can also rewrite pow(z, 2) % integer then. It will be faster.
Try to reduce bigint copying and arithmetic anyway if possible.


More information about the Digitalmars-d-learn mailing list