X-Git-Url: https://www.ginac.de/ginac.git//ginac.git?p=ginac.git;a=blobdiff_plain;f=check%2Fexam_cra.cpp;h=a20027d07437829f3c9b1520d6beb949c8ab4630;hp=11e1ab700405076a739944652b68063ae924fbf9;hb=e0a84a395ab1bf84813eea95fde9c8a361dae9bc;hpb=546bababce8ef2b3c5ed3011cb7e49bd78016844 diff --git a/check/exam_cra.cpp b/check/exam_cra.cpp index 11e1ab70..a20027d0 100644 --- a/check/exam_cra.cpp +++ b/check/exam_cra.cpp @@ -1,13 +1,38 @@ -#include +/** @file exam_cra.cpp + * + * Test of Chinese remainder algorithm. */ + +/* + * GiNaC Copyright (C) 1999-2015 Johannes Gutenberg University Mainz, Germany + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#include "polynomial/cra_garner.h" + #include #include #include #include -#include "polynomial/cra_garner.hpp" +using namespace cln; +#include +#include #include -#include #include -using namespace cln; +#include +#include using namespace std; /// Generate a sequences of primes p_i such that \prod_i p_i < limit @@ -101,12 +126,14 @@ make_random_moduli(const cln::cl_I& limit) std::vector moduli; cln::cl_I prod(1); cln::cl_I next = random_I(std::min(limit >> 1, cln::cl_I(128))); + unsigned count = 0; do { cln::cl_I tmp = nextprobprime(next); next = tmp + random_I(cln::cl_I(10)) + 1; prod = prod*tmp; moduli.push_back(tmp); - } while (prod < limit); + ++count; + } while (prod < limit || (count < 2)); return moduli; } @@ -117,4 +144,3 @@ static void dump(const std::vector& v) std::cerr << v[i] << " "; std::cerr << "]"; } -