# Ancient Egyptian Multiplication

Actionscript:
1. egyptianMultiply(12, 99);
2.
3. // trace(12 * 99) // test to make sure it works
4.
5. /* outputs:
6. /64 768
7. /32 384
8.  16 192
9.  8 96
10.  4 48
11. /2 24
12. /1 12
13. ---
14. 1188
15. */
16.
17.
18. function egyptianMultiply(valueA:Number, valueB:Number):void {
19.
20.     var left:Array = [];
21.     var right:Array = []
22.
23.     // swap if valueB is smaller than value A
24.     if (valueB <valueA){
25.         var swap:int = valueB;
26.         valueB = valueA;
27.         valueA = swap;
28.     }
29.
30.     // create left and right columns
31.     var currentLeft:int = 1;
32.     var currentRight:int = valueA;
33.
34.     while (currentLeft <valueB){
35.         left.push(currentLeft);
36.         right.push(currentRight);
37.         currentRight += currentRight;
38.         currentLeft += currentLeft;
39.     }
40.
41.
42.     // add up the right column based on the left
43.     currentLeft = 0;
44.     var rightSum:int;
45.     var leftSum:int;
46.     var i:int = left.length - 1;
47.
48.     while (currentLeft != valueB){
49.
50.       leftSum = currentLeft + left[i];
51.       // if the next number causes the sum
52.       // to go above valueB, skip it
53.       if (leftSum <= valueB){
54.         currentLeft = leftSum;
55.         rightSum += right[i];
56.         trace("/" + left[i]  + " " + right[i]);
57.       } else {
58.         trace(" " + left[i]  + " " + right[i]);
59.       }
60.       i--;
61.     }
62.     trace("---");
63.     trace(rightSum);
64. }

Someone mentioned egyptian multiplication to me yesterday... So read a little about it here and whipped up this example. For some reason I decided to do it in processing ... once it worked I ported it to ActionScript.

The above link describing the technique I used is from http://www.jimloy.com/... I haven't spent much time digging around the site, but it appears to have some pretty nice stuff on it...

If you're curious, here is the original processing version:

JAVA:
1. Vector left = new Vector();
2. Vector right = new Vector();
3.
4. int valueA = 10;
5. int valueB = 8;
6.
7. if (valueB <valueA){
8.     int swap = valueB;
9.     valueB = valueA;
10.     valueA = swap;
11. }
12.
13. int currentLeft = 1;
14. int currentRight = valueA;
15. while (currentLeft <valueB){
18.     currentRight += currentRight;
19.     currentLeft += currentLeft;
20. }
21.
22. currentLeft = 0;
23.
24. int result = 0;
25. int i = left.size() - 1;
26. while (currentLeft != valueB){
27.
28.   int temp = currentLeft + (Integer) left.get(i);
29.   if (temp <= valueB){
30.
31.     currentLeft = temp;
32.     result += (Integer) right.get(i);
33.     println("/" + left.get(i) + " " + right.get(i));
34.   } else {
35.     println(" " + left.get(i)  + " " + right.get(i));
36.   }
37.
38.   i--;
39. }
40. println("---");
41. println(result);

After writing, this I took a look at the wikipedia entry... I also found myself on this short page about a scribe called Ahmes. (I recommend reading this if you are interested in PI)

### One Comment

1. Posted December 12, 2009 at 3:39 am | Permalink

please i need some tutorials withe mouse events