Russian Peasant Multiplication / was question on how
- To: mathgroup at smc.vnet.net
- Subject: [mg131370] Russian Peasant Multiplication / was question on how
- From: "Dr. Robert Kragler" <kragler at hs-weingarten.de>
- Date: Tue, 2 Jul 2013 00:44:02 -0400 (EDT)
- Delivered-to: l-mathgroup@mail-archive0.wolfram.com
- Delivered-to: l-mathgroup@wolfram.com
- Delivered-to: mathgroup-outx@smc.vnet.net
- Delivered-to: mathgroup-newsendx@smc.vnet.net
- Reply-to: kragler at hs-weingarten.de
On Sun, Jun 30, 2013 at 3:29 AM, <d.a.paxton at gmail.com> wrote:
Hi Dave,
in Wikipedia you will find an explicit example for the Russian Peasant
Multiplication. This algorithm can be simply programed in Mathematica :
RussianPeasantMultplication[x0_Integer,y0_Integer]:=
Module[{x,y,yS,nD },
x=x0;y=y0; yS=y;
nD=Max @ (Length /@ IntegerDigits @ {x0,y0});
pf=PaddedForm[#,2nD+2]&;
If[x<0,(sgn=Sign[x];x=Abs[x];),(sgn=+1;x=x;)];
While[x>=1,(Print["x=",pf @ x,"; ","y=",pf @ y,"; ","yS=",pf @ yS ];
x=Floor[x/2];y=2y;
If[OddQ[x], yS=yS+y];) ];
Return[sgn*yS]
]
See for example
x0=-27;y0=82;
RussianPeasantMultplication[x0,y0]
gives as output
x= 27; y= 82; yS= 82
x= 13; y= 164; yS= 246
x= 6; y= 328; yS= 246
x= 3; y= 656; yS= 902
x= 1; y= 1312; yS= 2214
Out[32]= -2214
Regards
Robert
Robert Kragler
Email : kragler at hs-weingarten.de
URL : http://portal.hs-weingarten.de/web/kragler