Moltiplicare senza moltiplicare

Il forum di Base5, dove è possibile postare problemi, quiz, indovinelli, rompicapo, enigmi e quant'altro riguardi la matematica ricreativa e oltre.

Moderatori: Gianfranco, Bruno

Rispondi
Gianfranco
Supervisore del sito
Supervisore del sito
Messaggi: 1720
Iscritto il: ven mag 20, 2005 9:51 pm
Località: Sestri Levante
Contatta:

Moltiplicare senza moltiplicare

Messaggio da Gianfranco »

Multiply by 8 without using multiplication or addition. Now do the same with 7.

Moltiplicate un qualunque numero per 8 senza fare né moltiplicazioni né addizioni.
Poi fate la stessa cosa col 7.

Come lo interpretate?
Come lo risolvete?

Tratto da Wu-riddles - Computer Science
http://www.ocf.berkeley.edu/~wwu/riddles/cs.shtml


Gianfranco

Br1
Livello 6
Livello 6
Messaggi: 465
Iscritto il: mer feb 21, 2007 5:53 pm
Località: Bologna

Messaggio da Br1 »

Al volo!

A me viene in mente questo fatto semplice
semplice semplice (e potrei aggiungere un
altro semplice).

Prendo un numero (56) e scrivo uno zero
dopo la cifra finale (560). Quindi divido
l'ultimo numero ottenuto per 5 (560:5 = 112)
e sottraggo il risultato al dividendo
(560-112 = 448). Così ho trovato il prodotto
del numero iniziale per 8 (56x8 = 448).
Oppure, senza divisioni, a 560 si toglie
due volte 56.

Storia simile per 7. In questo caso, però,
dopo la/e sottrazione/i tolgo al risultato anche (di
nuovo) il numero iniziale:
448-56 = 392, 56x7 = 392.

Vabbe'... senz'altro è una boiata (e ultimamente
ne ho scritte!), visto che una moltiplicazione
implicita c'è e la sottrazione e la divisione
potrebbero essere ricondotte all'addizione e
alla moltiplicazione.

Però vengo da un inzio di giornata piuttosto
movimentato e fradicio :(
A Bologna è in corso un bell'acquazzone, e
chi va a piedi è costretto a subire la canfoneria
di coloro che si spostano ben protetti nelle
proprie autovetture. Sono stato schizzato
più volte e su tutti i lati (solo dalla pioggia vera
e propria sono riuscito a ripararmi) e ritrovarsi
con i vestiti bagnati e sporchi non è certo una
bella soddisfazione!
Presa la corriera, dopo una decina di minuti
abbiamo tamponato violentemente un furgone.
Per fortuna non è successo nulla di grave
alle persone, ma l'accaduto non ha favorito
certamente uno scorrimento normale delle
cose. Ritardi e nuova acqua di pozzanghera
sui vestiti!

Buona giornata a tutti :D
Ultima modifica di Br1 il mar set 04, 2007 11:38 am, modificato 4 volte in totale.
Bruno

mathmum
Livello 5
Livello 5
Messaggi: 337
Iscritto il: sab nov 19, 2005 5:39 pm
Località: World (Wide Web) - IT

Messaggio da mathmum »

Penso che il quesito posto alla fonte richieda una risposta "computeristica" più che un approccio puramente di calcolo matematico.

Quindi dovremmo scrivere un programmino che ci permetta di fare il prodotto per 8 e poi per 7 senza utilizzare gli operatori usuali.

Una volta scoperto come moltiplicare per 8 ( e qui ci devo ancora pensare, la mia idea di base sarebbe lavorare sulla stringa binaria di rappresentazione del numero), per moltiplicare per 7 basta utilizzare il codice del prodotto per 8 e sottrarre alla cifra restituita il numero originario.

Spero di essermi spiegata decentemente (a Milano c'è un vento tropicale). Ora provo a pensare al "*8"...
ciao


_edit postumo
In C++ non c'è mica l'operatore leftshift << che fa quello che vogliamo?
(antichi ricordi, poi vado a controllare)
Quindi x<<3 vuol dire spostiamo x a sx di 3 posti nella stringa del numero, i.e. moltiplichiamo per 8.
Vado a cercare i miei appunti di C++ (primo lavoro di traduzione che ho fatto, guida della Borland a C++, millenovecentoottantaqualcosa...) uff bei tempi...
mathmum

...la vita è complessa: ha componenti reali ed immaginarie...

Br1
Livello 6
Livello 6
Messaggi: 465
Iscritto il: mer feb 21, 2007 5:53 pm
Località: Bologna

Messaggio da Br1 »

Ciao, Mathmum!

Sì, l'avevo capita così anch'io, ma con "computeristico"
e "programmino" condivido veramente poco ( :( ) e
quindi sono rimasto (sia pure banalmente) nello spazio
minuto che va da penna a carta.
Come ha appena scritto il nostro Pasquale in un altro
post, tolgo anch'io l'incomodo.
A voi la palla :D
Bruno

Quelo
Livello 7
Livello 7
Messaggi: 902
Iscritto il: ven giu 16, 2006 3:34 pm

Re: Moltiplicare senza moltiplicare

Messaggio da Quelo »

Gianfranco ha scritto:Moltiplicate un qualunque numero per 8 senza fare né moltiplicazioni né addizioni.
In base 2 basta aggiungere 3 zeri ... :wink:
[Sergio] / $17$

Pasquale
Livello 12
Livello 12
Messaggi: 2854
Iscritto il: mer mag 25, 2005 2:14 am

Messaggio da Pasquale »

Volendo giocare con le basi e col computer, allora con un "trasformatore" di basi, si esprime il numero in base 8, 7, o altra che dir si voglia, e si aggiunge uno zero; quindi si ritrasforma in base 10.
Comunque le soluzioni di Bruno rispettano le condizioni e potremmo combinarle anche così:

prodotto per 8: aggiungo uno zero a destra del numero iniziale e sottraggo due volte il numero iniziale; vale a dire
n*8=n*(10-2)

prodotto per 7: similmente, aggiungo uno zero e sottraggo tre volte il numero iniziale

Però mi sa che Gianfranco intende tutt'altro...forse vuole qualcosa in Decimal Basic, in cui compare solo una sottrazione:

INPUT PROMPT " numero da moltiplicare per 8 e per 7 -> ": n
print
LET a$=BSTR$(n,2)&"000"
LET p = BVAL(a$,2)
PRINT n;"x";8;"=";p
PRINT n;"x";7;"=";p-n
END

(traduzione del commento di Quelo)
_________________

$\text { }$ciao Immagine ciao
E' la somma che fa il totale (Totò)

0-§
Livello 6
Livello 6
Messaggi: 454
Iscritto il: ven nov 18, 2005 10:33 pm
Località: Bologna

Re: Moltiplicare senza moltiplicare

Messaggio da 0-§ »

Gianfranco ha scritto:Moltiplicate un qualunque numero per 8 senza fare né moltiplicazioni né addizioni.
Facile! Basta aggiungere tre zeri e poi fare a mente una normalissima divisione per 125 :mrgreen: :mrgreen: :mrgreen:
Sì, lo so, è una stupidata, ma credo che una moltiplicazione implicita sia ammessa e poi si tratta solo di una divisione facile facile(beh, quasi :twisted: )

Saluti.
Lo scopo principale di una dichiarazione DATA è quello di dare dei nomi alle costanti; anziché inserire ogni volta 3.141592653589793 come valore di $\pi$, con una dichiarazione DATA si può assegnare tale valore alla variabile PI che può essere poi usata per indicare la costante. Ciò rende anche più semplice modificare il programma, qualora il valore di $\pi$ dovesse cambiare.

-Da un vecchio manuale FORTRAN della Xerox

Gianfranco
Supervisore del sito
Supervisore del sito
Messaggi: 1720
Iscritto il: ven mag 20, 2005 9:51 pm
Località: Sestri Levante
Contatta:

Messaggio da Gianfranco »

Complimenti a tutti!

Bruno, direi che le tue soluzioni sono accettabilissime.
Qui nel Tigullio invece c'era un bel sole!

Mathmum, giuste anche le tue considerazioni. Ricordo che nel linguaggio-macchina del microprocessore 6502 (quello dei mitici Commodore e dell'Apple II) c'era propriol'istruzione SHIFT di un byte, spostava tutti i bit di un posto verso "sinistra" e inseriva uno zero in fondo. In pratica serviva a moltiplicare per 2 (10) senza eseguire una moltiplicazione. SHIFTANDO 3 volte, si moltiplica per 8...
Poi, sottraendo il moltiplicando dal risultato, lo si moltiplica per 7...

Quelo, ... in pratica è quello che dici tu.

Pasquale, ... e anche quello che dici tu.
Non avevo in mente nulla di specifico. Qualunque interpretazione è la benvenuta!

Zerinf, anche la "moltiplicazione implicita" è benvenuta! Di fatto "aggiungere uno 0" è un'operazione diversa dall'eseguire una moltiplicazione.

Gianfranco.

Rispondi