32 lines
916 B
Prolog
32 lines
916 B
Prolog
threaded_decomp(Number,ID):-
|
|
thread_create(
|
|
(prime_decomp(Number,Y),
|
|
thread_exit((Number,Y)))
|
|
,ID,[]).
|
|
|
|
threaded_decomp_list(List,Erg):-
|
|
maplist(threaded_decomp,List,IDs),
|
|
maplist(thread_join,IDs,Results),
|
|
maplist(pack_exit_out,Results,Smallest_Factors_List),
|
|
largest_min_factor(Smallest_Factors_List,Erg).
|
|
|
|
pack_exit_out(exited(X),X).
|
|
%Note that here some error handling should happen.
|
|
|
|
largest_min_factor([(N,Facs)|A],(N2,Fs2)):-
|
|
min_list(Facs,MF),
|
|
largest_min_factor(A,(N,MF,Facs),(N2,_,Fs2)).
|
|
|
|
largest_min_factor([],Acc,Acc).
|
|
largest_min_factor([(N1,Facs1)|Rest],(N2,MF2,Facs2),Goal):-
|
|
min_list(Facs1, MF1),
|
|
(MF1 > MF2->
|
|
largest_min_factor(Rest,(N1,MF1,Facs1),Goal);
|
|
largest_min_factor(Rest,(N2,MF2,Facs2),Goal)).
|
|
|
|
|
|
format_it(List):-
|
|
threaded_decomp_list(List,(Number,Factors)),
|
|
format('Number with largest minimal Factor is ~w\nFactors are ~w\n',
|
|
[Number,Factors]).
|