Egyptian division: Difference between revisions

m
Simplified Prolog code
(Added Prolog Solution)
m (Simplified Prolog code)
Line 1,690:
{{works with|SWI Prolog}}
<lang prolog>egyptian_divide(Dividend, Divisor, Quotient, Remainder):-
powers2_multiples(Dividend, Divisor, 1, [1], Powers, [Divisor], Multiples),
accumulate(Dividend, Powers, Multiples, 0, Quotient, 0, Acc),
Remainder is Dividend - Acc.
 
powers2_multiples(Dividend, Divisor, _, Powers, Powers, Multiples, Multiples):-
Multiples = [M|_],
2 * DivisorM > Dividend,
!.
powers2_multiples(Dividend, Divisor, [Power, |P], Powers, [Multiple|M], Multiples):-
Power2 is 2 * Power,
Divisor2Multiple2 is 2 * DivisorMultiple,
powers2_multiples(Dividend, Divisor2, [Power2, [Power2Power|P], Powers,
[Divisor2Multiple2, Multiple|M], Multiples).
 
accumulate(_, [], [], Ans, Ans, Acc, Acc):-!.
1,777

edits