Services & Resources / Wolfram Forums / MathGroup Archive
-----

MathGroup Archive 2013

[Date Index] [Thread Index] [Author Index]

Search the Archive

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



  • Prev by Date: Re: Complex path integral wrong
  • Next by Date: Re: Complex path integral wrong
  • Previous by thread: Re: Russian Peasant Multiplication / was question on
  • Next by thread: kernel is shutdown without an error message.