X-Git-Url: https://ginac.de/ginac.git//ginac.git?a=blobdiff_plain;f=check%2Fexam_cra.cpp;h=ddfa691c5de66f2345b9aa67259954b83d52fab0;hb=dba1a17a6c04b32d55972e5d57f96b2489e1b627;hp=2c6163eef65c9e410e13bc8fa776bf4d0d96d3c5;hpb=44fa38df264efa7a87beb59afc4664595de8ab48;p=ginac.git diff --git a/check/exam_cra.cpp b/check/exam_cra.cpp index 2c6163ee..ddfa691c 100644 --- a/check/exam_cra.cpp +++ b/check/exam_cra.cpp @@ -1,14 +1,37 @@ -#include +/** @file exam_cra.cpp + * + * Test of Chinese remainder algorithm. */ + +/* + * GiNaC Copyright (C) 1999-2010 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 -#include -using namespace cln; +#include using namespace std; /// Generate a sequences of primes p_i such that \prod_i p_i < limit @@ -102,12 +125,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; } @@ -118,4 +143,3 @@ static void dump(const std::vector& v) std::cerr << v[i] << " "; std::cerr << "]"; } -