fork download
  1. prime_decomp(N, L) :-
  2. SN is sqrt(N),
  3. prime_decomp_1(N, SN, 2, [], L).
  4.  
  5.  
  6. prime_decomp_1(1, _, _, L, L) :- !.
  7.  
  8. % Special case for 2, increment 1
  9. prime_decomp_1(N, SN, D, L, LF) :-
  10. ( 0 is N mod D ->
  11. Q is N / D,
  12. SQ is sqrt(Q),
  13. prime_decomp_1(Q, SQ, D, [D |L], LF)
  14. ;
  15. D1 is D+1,
  16. ( D1 > SN ->
  17. LF = [N |L]
  18. ;
  19. prime_decomp_2(N, SN, D1, L, LF)
  20. )
  21. ).
  22.  
  23. % General case, increment 2
  24. prime_decomp_2(1, _, _, L, L) :- !.
  25.  
  26. prime_decomp_2(N, SN, D, L, LF) :-
  27. ( 0 is N mod D ->
  28. Q is N / D,
  29. SQ is sqrt(Q),
  30. prime_decomp_2(Q, SQ, D, [D |L], LF);
  31. D1 is D+2,
  32. ( D1 > SN ->
  33. LF = [N |L]
  34. ;
  35. prime_decomp_2(N, SN, D1, L, LF)
  36. )
  37. ).
Success #stdin #stdout 0.02s 68352KB
stdin
Standard input is empty
stdout
GNU Prolog 1.3.1
By Daniel Diaz
Copyright (C) 1999-2009 Daniel Diaz