%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% /* Nan.Numerics.Prime A simple prime number library Copyright 2016 Julio P. Di Egidio This file is part of Nan.Numerics.Prime. Nan.Numerics.Prime 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 3 of the License, or (at your option) any later version. Nan.Numerics.Prime 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 Nan.Numerics.Prime. If not, see . */ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % (SWI-Prolog 7.3.25) /* A simple prime number library :: logic @author Julio P. Di Egidio @version 1.2.5-beta @copyright 2016 Julio P. Di Egidio @license GNU GPLv3 */ :- use_module(library(plunit)). :- ensure_loaded(module_inc). :- module_inc('nan_numerics_prime_lgc.pl'). %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% :- begin_tests('prime_lgc:test_', [setup(prime_mem:clear_)]). test(test__1, [ fail ]) :- prime_lgc:test_(1). test(test__2, [ true ]) :- prime_lgc:test_(2). test(test__3, [ true ]) :- prime_lgc:test_(3). test(test__4, [ fail ]) :- prime_lgc:test_(4). test(test__10, [ fail ]) :- prime_lgc:test_(10). test(test__11, [ true ]) :- prime_lgc:test_(11). test(test__12, [ fail ]) :- prime_lgc:test_(12). test(test__112, [ fail ]) :- prime_lgc:test_(112). test(test__113, [ true ]) :- prime_lgc:test_(113). test(test__114, [ fail ]) :- prime_lgc:test_(114). test(test__220, [ fail ]) :- prime_lgc:test_(220). test(test__221, [ fail ]) :- prime_lgc:test_(221). test(test__222, [ fail ]) :- prime_lgc:test_(222). test(test__12300, [ fail ]) :- prime_lgc:test_(12300). test(test__12301, [ true ]) :- prime_lgc:test_(12301). :- end_tests('prime_lgc:test_'). %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% :- begin_tests('prime_lgc:div_', [setup(prime_mem:clear_)]). test(div__1, [ fail ]) :- prime_lgc:div_(1, _). test(div__2, [ fail ]) :- prime_lgc:div_(2, _). test(div__3, [ fail ]) :- prime_lgc:div_(3, _). test(div__4, [ true(P == 2) ]) :- prime_lgc:div_(4, P). test(div__210, [ true(P == 2) ]) :- prime_lgc:div_(210, P). test(div__211, [ fail ]) :- prime_lgc:div_(211, _). test(div__213, [ true(P == 3) ]) :- prime_lgc:div_(213, P). test(div__221, [ true(P == 13) ]) :- prime_lgc:div_(221, P). test(div__12300, [ true(P == 2) ]) :- prime_lgc:div_(12300, P). test(div__12301, [ fail ]) :- prime_lgc:div_(12301, _). test(div__sup, [ true(P == 3) ]) :- prime_lgc:div_(1234567891012345678901234567890123456789012345678910123456789012345678910123456789012345678910123456789012345678910123456789012345678910123456789012345678910123456789012345678910123456789012345678910123456789012345678910123456789012345678910123456789012345678910123456789012345678910123456789012345678910123456789012345678910123456789012345678910123456789012345678910123456789012345678910123456789012345678910123456789011111, P). :- end_tests('prime_lgc:div_'). %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% :- begin_tests('prime_lgc:div_rev_', [setup(prime_mem:clear_)]). test(div_rev__1, [ fail ]) :- prime_lgc:div_rev_(1, _). test(div_rev__2, [ fail ]) :- prime_lgc:div_rev_(2, _). test(div_rev__3, [ fail ]) :- prime_lgc:div_rev_(3, _). test(div_rev__4, [ true(P == 2) ]) :- prime_lgc:div_rev_(4, P). test(div_rev__210, [ true(P == 7) ]) :- prime_lgc:div_rev_(210, P). test(div_rev__211, [ fail ]) :- prime_lgc:div_rev_(211, _). test(div_rev__213, [ true(P == 71) ]) :- prime_lgc:div_rev_(213, P). test(div_rev__221, [ true(P == 17) ]) :- prime_lgc:div_rev_(221, P). test(div_rev__12300, [ true(P == 41) ]) :- prime_lgc:div_rev_(12300, P). test(div_rev__12301, [ fail ]) :- prime_lgc:div_rev_(12301, _). :- end_tests('prime_lgc:div_rev_'). %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% :- begin_tests('prime_lgc:fact_', [setup(prime_mem:clear_)]). test(fact__1, [ true(PFs == [1^1]) ]) :- prime_lgc:fact_(1, PFs). test(fact__2, [ true(PFs == [2^1]) ]) :- prime_lgc:fact_(2, PFs). test(fact__3, [ true(PFs == [3^1]) ]) :- prime_lgc:fact_(3, PFs). test(fact__4, [ true(PFs == [2^2]) ]) :- prime_lgc:fact_(4, PFs). test(fact__210, [ true(PFs == [2^1, 3^1, 5^1, 7^1]) ]) :- prime_lgc:fact_(210, PFs). test(fact__211, [ true(PFs == [211^1]) ]) :- prime_lgc:fact_(211, PFs). test(fact__213, [ true(PFs == [3^1, 71^1]) ]) :- prime_lgc:fact_(213, PFs). test(fact__221, [ true(PFs == [13^1, 17^1]) ]) :- prime_lgc:fact_(221, PFs). test(fact__12300, [ true(PFs == [2^2, 3^1, 5^2, 41^1]) ]) :- prime_lgc:fact_(12300, PFs). test(fact__12301, [ true(PFs == [12301^1]) ]) :- prime_lgc:fact_(12301, PFs). test(fact__sup, [ true(PFs == [2^1, 5^1, 12345678901234567891^1]) ]) :- prime_lgc:fact_(123456789012345678910, PFs). :- end_tests('prime_lgc:fact_'). %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% :- begin_tests('prime_lgc:gen_2_', [setup(prime_mem:clear_)]). test(gen_2__2_13, [ all(P == [2, 3, 5, 7, 11, 13]) ]) :- prime_lgc:gen_(1, P), (P >= 13, !; true). test(gen_2__109_149, [ all(P == [109, 113, 127, 131, 137, 139, 149]) ]) :- prime_lgc:gen_(108, P), (P >= 149, !; true). test(gen_2__211_229, [ all(P == [211, 223, 227, 229]) ]) :- prime_lgc:gen_(210, P), (P >= 229, !; true). test(gen_2__12289_12329, [ all(P == [12289, 12301, 12323, 12329]) ]) :- prime_lgc:gen_(12288, P), (P >= 12329, !; true). :- end_tests('prime_lgc:gen_2_'). %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% :- begin_tests('prime_lgc:gen_3_', [setup(prime_mem:clear_)]). test(gen_3__2_13, [ all(P == [2, 3, 5, 7, 11, 13]) ]) :- prime_lgc:gen_(1, 14, P). test(gen_3__109_149, [ all(P == [109, 113, 127, 131, 137, 139, 149]) ]) :- prime_lgc:gen_(108, 150, P). test(gen_3__211_229, [ all(P == [211, 223, 227, 229]) ]) :- prime_lgc:gen_(210, 230, P). test(gen_3__12289_12329, [ all(P == [12289, 12301, 12323, 12329]) ]) :- prime_lgc:gen_(12288, 12330, P). :- end_tests('prime_lgc:gen_3_'). %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% :- begin_tests('prime_lgc:gen_p_2_', [setup(prime_mem:clear_)]). test(gen_p_2__2_13, [ all(P == [2, 3, 5, 7, 11, 13]) ]) :- prime_lgc:gen_p_(2, P), (P >= 13, !; true). test(gen_p_2__109_149, [ all(P == [109, 113, 127, 131, 137, 139, 149]) ]) :- prime_lgc:gen_p_(109, P), (P >= 149, !; true). test(gen_p_2__211_229, [ all(P == [211, 223, 227, 229]) ]) :- prime_lgc:gen_p_(211, P), (P >= 229, !; true). test(gen_p_2__12289_12329, [ all(P == [12289, 12301, 12323, 12329]) ]) :- prime_lgc:gen_p_(12289, P), (P >= 12329, !; true). :- end_tests('prime_lgc:gen_p_2_'). %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% :- begin_tests('prime_lgc:gen_p_3_', [setup(prime_mem:clear_)]). test(gen_p_3__2_13, [ all(P == [2, 3, 5, 7, 11, 13]) ]) :- prime_lgc:gen_p_(2, 13, P). test(gen_p_3__109_149, [ all(P == [109, 113, 127, 131, 137, 139, 149]) ]) :- prime_lgc:gen_p_(109, 149, P). test(gen_p_3__211_229, [ all(P == [211, 223, 227, 229]) ]) :- prime_lgc:gen_p_(211, 229, P). test(gen_p_3__12289_12329, [ all(P == [12289, 12301, 12323, 12329]) ]) :- prime_lgc:gen_p_(12289, 12329, P). :- end_tests('prime_lgc:gen_p_3_'). %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% :- begin_tests('prime_lgc:gen_rev_2_', [setup(prime_mem:clear_)]). test(gen_rev_2__2_13, [ all(P == [13, 11, 7, 5, 3, 2]) ]) :- prime_lgc:gen_rev_(14, P). test(gen_rev_2__109_149, [ all(P == [149, 139, 137, 131, 127, 113, 109]) ]) :- prime_lgc:gen_rev_(150, P), (P =< 109, !; true). test(gen_rev_2__211_229, [ all(P == [229, 227, 223, 211]) ]) :- prime_lgc:gen_rev_(230, P), (P =< 211, !; true). test(gen_rev_2__12289_12329, [ all(P == [12329, 12323, 12301, 12289]) ]) :- prime_lgc:gen_rev_(12330, P), (P =< 12289, !; true). :- end_tests('prime_lgc:gen_rev_2_'). %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% :- begin_tests('prime_lgc:gen_rev_3_', [setup(prime_mem:clear_)]). test(gen_rev_3__2_13, [ all(P == [13, 11, 7, 5, 3, 2]) ]) :- prime_lgc:gen_rev_(1, 14, P). test(gen_rev_3__109_149, [ all(P == [149, 139, 137, 131, 127, 113, 109]) ]) :- prime_lgc:gen_rev_(108, 150, P). test(gen_rev_3__211_229, [ all(P == [229, 227, 223, 211]) ]) :- prime_lgc:gen_rev_(210, 230, P). test(gen_rev_3__12289_12329, [ all(P == [12329, 12323, 12301, 12289]) ]) :- prime_lgc:gen_rev_(12288, 12330, P). :- end_tests('prime_lgc:gen_rev_3_'). %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% :- begin_tests('prime_lgc:gen_rev_p_2_', [setup(prime_mem:clear_)]). test(gen_rev_p_2__2_13, [ all(P == [13, 11, 7, 5, 3, 2]) ]) :- prime_lgc:gen_rev_p_(13, P). test(gen_rev_p_2__109_149, [ all(P == [149, 139, 137, 131, 127, 113, 109]) ]) :- prime_lgc:gen_rev_p_(149, P), (P =< 109, !; true). test(gen_rev_p_2__211_229, [ all(P == [229, 227, 223, 211]) ]) :- prime_lgc:gen_rev_p_(229, P), (P =< 211, !; true). test(gen_rev_p_2__12289_12329, [ all(P == [12329, 12323, 12301, 12289]) ]) :- prime_lgc:gen_rev_p_(12329, P), (P =< 12289, !; true). :- end_tests('prime_lgc:gen_rev_p_2_'). %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% :- begin_tests('prime_lgc:gen_rev_p_3_', [setup(prime_mem:clear_)]). test(gen_rev_p_3__2_13, [ all(P == [13, 11, 7, 5, 3, 2]) ]) :- prime_lgc:gen_rev_p_(2, 13, P). test(gen_rev_p_3__109_149, [ all(P == [149, 139, 137, 131, 127, 113, 109]) ]) :- prime_lgc:gen_rev_p_(109, 149, P). test(gen_rev_p_3__211_229, [ all(P == [229, 227, 223, 211]) ]) :- prime_lgc:gen_rev_p_(211, 229, P). test(gen_rev_p_3__12289_12329, [ all(P == [12329, 12323, 12301, 12289]) ]) :- prime_lgc:gen_rev_p_(12289, 12329, P). :- end_tests('prime_lgc:gen_rev_p_3_'). %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% :- begin_tests('prime_lgc:next_', [setup(prime_mem:clear_)]). test(next__1, [ true(P == 2) ]) :- prime_lgc:next_(1, P). test(next__2, [ true(P == 3) ]) :- prime_lgc:next_(2, P). test(next__3, [ true(P == 5) ]) :- prime_lgc:next_(3, P). test(next__4, [ true(P == 5) ]) :- prime_lgc:next_(4, P). test(next__7, [ true(P == 11) ]) :- prime_lgc:next_(7, P). test(next__8, [ true(P == 11) ]) :- prime_lgc:next_(8, P). test(next__10, [ true(P == 11) ]) :- prime_lgc:next_(10, P). test(next__11, [ true(P == 13) ]) :- prime_lgc:next_(11, P). test(next__12, [ true(P == 13) ]) :- prime_lgc:next_(12, P). test(next__13, [ true(P == 17) ]) :- prime_lgc:next_(13, P). test(next__112, [ true(P == 113) ]) :- prime_lgc:next_(112, P). test(next__113, [ true(P == 127) ]) :- prime_lgc:next_(113, P). test(next__210, [ true(P == 223) ]) :- prime_lgc:next_(211, P). test(next__211, [ true(P == 223) ]) :- prime_lgc:next_(211, P). test(next__12288, [ true(P == 12289) ]) :- prime_lgc:next_(12288, P). test(next__12289, [ true(P == 12301) ]) :- prime_lgc:next_(12289, P). :- end_tests('prime_lgc:next_'). %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% :- begin_tests('prime_lgc:next_p_', [setup(prime_mem:clear_)]). test(next_p__2, [ true(P == 3) ]) :- prime_lgc:next_p_(2, P). test(next_p__3, [ true(P == 5) ]) :- prime_lgc:next_p_(3, P). test(next_p__7, [ true(P == 11) ]) :- prime_lgc:next_p_(7, P). test(next_p__11, [ true(P == 13) ]) :- prime_lgc:next_p_(11, P). test(next_p__13, [ true(P == 17) ]) :- prime_lgc:next_p_(13, P). test(next_p__113, [ true(P == 127) ]) :- prime_lgc:next_p_(113, P). test(next_p__211, [ true(P == 223) ]) :- prime_lgc:next_p_(211, P). test(next_p__12289, [ true(P == 12301) ]) :- prime_lgc:next_p_(12289, P). :- end_tests('prime_lgc:next_p_'). %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% :- begin_tests('prime_lgc:prev_', [setup(prime_mem:clear_)]). test(prev__1, [ fail ]) :- prime_lgc:prev_(1, _). test(prev__2, [ fail ]) :- prime_lgc:prev_(2, _). test(prev__3, [ true(P == 2) ]) :- prime_lgc:prev_(3, P). test(prev__4, [ true(P == 3) ]) :- prime_lgc:prev_(4, P). test(prev__7, [ true(P == 5) ]) :- prime_lgc:prev_(7, P). test(prev__8, [ true(P == 7) ]) :- prime_lgc:prev_(8, P). test(prev__10, [ true(P == 7) ]) :- prime_lgc:prev_(10, P). test(prev__11, [ true(P == 7) ]) :- prime_lgc:prev_(11, P). test(prev__12, [ true(P == 11) ]) :- prime_lgc:prev_(12, P). test(prev__13, [ true(P == 11) ]) :- prime_lgc:prev_(13, P). test(prev__127, [ true(P == 113) ]) :- prime_lgc:prev_(127, P). test(prev__128, [ true(P == 127) ]) :- prime_lgc:prev_(128, P). test(prev__223, [ true(P == 211) ]) :- prime_lgc:prev_(223, P). test(prev__224, [ true(P == 223) ]) :- prime_lgc:prev_(224, P). test(prev__12301, [ true(P == 12289) ]) :- prime_lgc:prev_(12301, P). test(prev__12302, [ true(P == 12301) ]) :- prime_lgc:prev_(12302, P). :- end_tests('prime_lgc:prev_'). %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% :- begin_tests('prime_lgc:prev_p_', [setup(prime_mem:clear_)]). test(prev_p__2, [ fail ]) :- prime_lgc:prev_p_(2, _). test(prev_p__3, [ true(P == 2) ]) :- prime_lgc:prev_p_(3, P). test(prev_p__7, [ true(P == 5) ]) :- prime_lgc:prev_p_(7, P). test(prev_p__11, [ true(P == 7) ]) :- prime_lgc:prev_p_(11, P). test(prev_p__13, [ true(P == 11) ]) :- prime_lgc:prev_p_(13, P). test(prev_p__127, [ true(P == 113) ]) :- prime_lgc:prev_p_(127, P). test(prev_p__223, [ true(P == 211) ]) :- prime_lgc:prev_p_(223, P). test(prev_p__12301, [ true(P == 12289) ]) :- prime_lgc:prev_p_(12301, P). :- end_tests('prime_lgc:prev_p_'). %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% :- begin_tests('prime_lgc:right_', [setup(prime_mem:clear_)]). test(right__1, [ true(P == 2) ]) :- prime_lgc:right_(1, P). test(right__2, [ true(P == 2) ]) :- prime_lgc:right_(2, P). test(right__3, [ true(P == 3) ]) :- prime_lgc:right_(3, P). test(right__4, [ true(P == 5) ]) :- prime_lgc:right_(4, P). test(right__10, [ true(P == 11) ]) :- prime_lgc:right_(10, P). test(right__11, [ true(P == 11) ]) :- prime_lgc:right_(11, P). test(right__12, [ true(P == 13) ]) :- prime_lgc:right_(12, P). test(right__113, [ true(P == 113) ]) :- prime_lgc:right_(113, P). test(right__114, [ true(P == 127) ]) :- prime_lgc:right_(114, P). test(right__211, [ true(P == 211) ]) :- prime_lgc:right_(211, P). test(right__212, [ true(P == 223) ]) :- prime_lgc:right_(212, P). test(right__12289, [ true(P == 12289) ]) :- prime_lgc:right_(12289, P). test(right__12290, [ true(P == 12301) ]) :- prime_lgc:right_(12290, P). :- end_tests('prime_lgc:right_'). %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% :- begin_tests('prime_lgc:left_', [setup(prime_mem:clear_)]). test(left__1, [ fail ]) :- prime_lgc:left_(1, _). test(left__2, [ true(P == 2) ]) :- prime_lgc:left_(2, P). test(left__3, [ true(P == 3) ]) :- prime_lgc:left_(3, P). test(left__4, [ true(P == 3) ]) :- prime_lgc:left_(4, P). test(left__10, [ true(P == 7) ]) :- prime_lgc:left_(10, P). test(left__11, [ true(P == 11) ]) :- prime_lgc:left_(11, P). test(left__12, [ true(P == 11) ]) :- prime_lgc:left_(12, P). test(left__113, [ true(P == 113) ]) :- prime_lgc:left_(113, P). test(left__114, [ true(P == 113) ]) :- prime_lgc:left_(114, P). test(left__211, [ true(P == 211) ]) :- prime_lgc:left_(211, P). test(left__212, [ true(P == 211) ]) :- prime_lgc:left_(212, P). test(left__12289, [ true(P == 12289) ]) :- prime_lgc:left_(12289, P). test(left__12290, [ true(P == 12289) ]) :- prime_lgc:left_(12290, P). :- end_tests('prime_lgc:left_'). %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%