]> www.ginac.de Git - cln.git/blobdiff - src/numtheory/cl_nt_isprobprime.cc
Remove libtool bits from the repository.
[cln.git] / src / numtheory / cl_nt_isprobprime.cc
index a761cf97e8a25b153c6973bd1fd213752609318a..eadb62f53a982d4b3941bf1355f48a82c7011332 100644 (file)
@@ -1,7 +1,7 @@
 // isprobprime().
 
 // General includes.
-#include "cl_sysdep.h"
+#include "base/cl_sysdep.h"
 
 // Specification.
 #include "cln/numtheory.h"
@@ -9,15 +9,21 @@
 
 // Implementation.
 
-#include "cl_IF.h"
-#include "cln/abort.h"
+#include "numtheory/cl_IF.h"
+#include "cln/integer_io.h"
+#include "cln/exception.h"
+#include <sstream>
 
 namespace cln {
 
-cl_boolean isprobprime (const cl_I& n)
+bool isprobprime (const cl_I& n)
 {
-       if (!(n > 0))
-               cl_abort();
+       if (!(n > 0)) {
+               std::ostringstream buf;
+               fprint(buf, n);
+               fprint(buf, " is not a positive integer.");
+               throw runtime_exception(buf.str());
+       }
        // With a Miller-Rabin count = 50 the final error probability is
        // 4^-50 < 10^-30.
        var int count = 50;
@@ -32,12 +38,12 @@ cl_boolean isprobprime (const cl_I& n)
                        if (i < cl_small_prime_table_size
                            && ((unsigned int) cl_small_prime_table[i] == nn
                                || nn == 2))
-                               return cl_true;
+                               return true;
                        else
-                               return cl_false;
+                               return false;
                }
                if ((nn % 2) == 0 || cl_trialdivision(nn,1,trialdivide_limit))
-                       return cl_false;
+                       return false;
                // For small n, only few Miller-Rabin tests are needed.
                if (nn < 2000U) count = 1; // {2}
                else if (nn < 1300000U) count = 2; // {2,3}
@@ -47,10 +53,10 @@ cl_boolean isprobprime (const cl_I& n)
                var uint32 nhi = cl_I_to_UL(ldb(n,cl_byte(32,32)));
                var uint32 nlo = cl_I_to_UL(ldb(n,cl_byte(32,0)));
                if ((nlo % 2) == 0 || cl_trialdivision(nhi,nlo,1,trialdivide_limit))
-                       return cl_false;
+                       return false;
        } else {
                if (evenp(n) || cl_trialdivision(n,1,trialdivide_limit))
-                       return cl_false;
+                       return false;
        }
        // Step 2: Miller-Rabin test.
        return cl_miller_rabin_test(n,count,NULL);