Optimal Mersenne Primes Search Using Modular Groups (in Rust?)

I just released a paper on how to optimally find Mersenne Primes of form 2^p - 1.
It's mathematically super simple, and easy to implement in software.
The paper provides proof of concept Crystal code for a single core implementation.

Currently the GIMPS project generates them by directly computing|testing 2^p -1 by directly using candidate values of p, which my method eliminates having to do. But they already have the software to generate and do the primality tests on those large values, which are 100s of digits long.

My question: does the Rust ecosystem have the ability to perform this large number math natively, or able to took into the GIMPS apps and use them to do the math, storage, etc?

It would be interesting to have an optimized Rustified version of GIMPS, since it's taking over the world in so many other areas. :blush:

https://www.academia.edu/178745494/Optimal_Mersenne_Primes_Search_Using_Modular_Groups

You'd have to be a bit more specific about "natively" I guess, but it does provide large number primitives like carrying_mul that LLVM should handle fine without ASM.

There's also, of course, plenty of big integer crates like num-bigint — Rust math library // Lib.rs

You shouldn't have any trouble implementing this in Rust, in short.

Thanks.
I posted the update paper|code (available at the link)
It's now orders-of-magnitude faster.
I've posted its output, which only stops because the software couldn't continue to process those larger numbers. But if that is fixed, then anyone on their laptop can generate as many Mp as their hearts|time allows.

➜  mps ./mpgs                                      
Starting search for next Mp with known p = 3
[5, 2, 31]
Elapsed time = 00:00:00.000057178

Starting search for next Mp with known p = 5
[7, 2, 127]
Elapsed time = 00:00:00.000024556

Starting search for next Mp with known p = 7
[13, 6, 8191]
Elapsed time = 00:00:00.000020819

Starting search for next Mp with known p = 13
[17, 4, 131071]
Elapsed time = 00:00:00.000026760

Starting search for next Mp with known p = 17
[19, 2, 524287]
Elapsed time = 00:00:00.000022142

Starting search for next Mp with known p = 19
[31, 12, 2147483647]
Elapsed time = 00:00:00.000028463

Starting search for next Mp with known p = 31
[61, 30, 2305843009213693951]
Elapsed time = 00:00:00.000046226

Starting search for next Mp with known p = 61
[89, 28, 618970019642690137449562111]
Elapsed time = 00:00:00.000059962

Starting search for next Mp with known p = 89
[107, 18, 162259276829213363391578010288127]
Elapsed time = 00:00:00.000050865

Starting search for next Mp with known p = 107
[127, 20, 170141183460469231731687303715884105727]
Elapsed time = 00:00:00.000048701

Starting search for next Mp with known p = 127
[521, 394, 6864797660130609714981900799081393217269435300143305409394463459185543183397656052122559640661454554977296311391480858037121987999716643812574028291115057151]
Elapsed time = 00:00:00.002608888

Starting search for next Mp with known p = 521
[607, 86, 531137992816767098689588206552468627329593117727031923199444138200403559860852242739162502265229285668889329486246501015346579337652707239409519978766587351943831270835393219031728127]
Elapsed time = 00:00:00.002203116