1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74
|
/*-------------------------------------------------------------------------*/
/* Benchmark (Finite Domain) */
/* */
/* Name : digit8.pl */
/* Title : particular 8 digit number */
/* Original Source: Daniel Diaz - INRIA France */
/* Adapted by : Daniel Diaz for GNU Prolog */
/* Date : October 1993 */
/* */
/* Find the 8 digit number N such that: */
/* */
/* - N is a square */
/* - if we put a 1 in front of the decimal notation of N then it is */
/* still a square */
/* */
/* Solution: */
/* [N,X,M,Y] */
/* [23765625,4875,123765625,11125] */
/* [56250000,7500,156250000,12500] */
/*-------------------------------------------------------------------------*/
q :-
get_fd_labeling(Lab),
statistics(runtime, _),
( digit8(L, Lab),
write(L),
nl,
fail
; write('No more solutions'),
nl
),
statistics(runtime, [_, Y]),
write('time : '),
write(Y),
nl.
digit8(L, Lab) :-
L = [N, X, M, Y],
N #>= 10000000,
N #=< 99999999,
X ** 2 #= N,
100000000 + N #= M,
Y ** 2 #= M,
lab(Lab, L).
lab(normal, L) :-
fd_labeling(L).
lab(ff, L) :-
fd_labelingff(L).
get_fd_labeling(Lab) :-
argument_counter(C),
get_labeling1(C, Lab).
get_labeling1(1, normal).
get_labeling1(2, Lab) :-
argument_value(1, Lab).
:- initialization(q).
|