Moltiplicazione senza moltiplicazione

Secondo alcune fonti, i babilonesi utilizzavano una tecnica di moltiplicazione che sfruttava una tabella dei quadrati. Esistevano delle tabelle in cui si poteva trovare, per ogni numero n fino a un certo valore, il numero n2. Il vantaggio del metodo era quello di non richiedere moltiplicazioni. In particolare, si usava la formula:

xy = ( (x+y)2 - x2 -y2 )/2

Vogliamo realizzare un programma che utilizza la stessa tecnica: prima compiliamo una tabella di quadrati, e poi effettuiamo delle moltiplicazioni usando questo metodo.

Per memorizzare la tabella dei quadrati, usiamo un vettore di cento elementi. Questo vettore è sufficiente a moltiplicare due numeri la cui somma non supera 100. Una volta scritti i valori nel vettore, possiamo utilizzarli per calcolare tutte le moltiplicazioni necessare. Il programma completo MoltiplicazioneBabilonese.java è riportato qui sotto.

/*
  Moltiplicazione fra interi la cui somma e' minore
  di 100 usando il metodo babilonese.
*/

class MoltiplicazioneBabilonese {
  public static void main(String[] args) {
    int quadrati[]=new int[101];
    int i;
    int a=10, b=20, c=2, d=4, e=32, f=31;

    for(i=0; i<=100; i=i+1) {
      quadrati[i]=i*i;
    }

    System.out.println( (quadrati[a+b]-quadrati[a]-quadrati[b])/2 );
    System.out.println( (quadrati[c+d]-quadrati[c]-quadrati[d])/2 );
    System.out.println( (quadrati[e+f]-quadrati[e]-quadrati[f])/2 );
  }
}