/* Napisati Prolog predikat koji prikazuje sve slu?ajeve množenja dva broja prilikom kojih se u ?iniocima i dobijenom rezultatu ta?no jednom pojavljuju sve cifre (osim nule). Na primer, jedan takav proizvod u dekadnom sistemu je množenje 48 i 159 - dobija se 7632, ?ime su „pokrivene“ sve dekadne cifre (osim nule). */ skup(I,G,[I|Rep]):-I =< G, M is I + 1, skup(M,G,Rep), !. skup(_,_,[]). duzina([],0):-!. duzina([G|R],N):-duzina(R,M), N is M+1. pripada(X,[X|_]). pripada(X,[_|Y]):-pripada(X,Y). cifre(X,[X]):-X < 10, !. cifre(X,[G|R]):-G is X mod 10, !, X1 is X//10, cifre(X1,R). razliciti([]). razliciti([G|R]) :- not(pripada(G,R)), razliciti(R). dodaj([],L,L):-!. dodaj([G|R],L,[G|R1]):-dodaj(R,L,R1). nema_nulu([]):-!. nema_nulu([G|R]):-G \= 0, nema_nulu(R). treci(Nova):-skup(2,500,S), pripada(A,S), pripada(B,S), C is A*B, cifre(A,A1), cifre(B,B1), cifre(C,C1), dodaj(A1,B1,T), dodaj(T,C1,Nova), duzina(Nova,D), D == 9, nema_nulu(Nova), razliciti(Nova), write('A = '), write(A), nl, write('B = '), write(B), nl, write('C = '), write(C), nl, nl. program2005063 :- treci(X), fail. program2005063.