Dati i n
numeri in un array (non si può presumere che siano numeri interi), vorrei calcolare il prodotto di tutti i sottogruppi di dimensioni n-1
.
Puoi farlo moltiplicando tutti i numeri insieme e poi dividendoli uno per volta, purché nessuno dei numeri sia zero. Tuttavia, quanto velocemente puoi farlo senza divisione?
Se non si consente la divisione, qual è il numero minimo di operazioni aritmetiche (ad esempio moltiplicazione e addizione) necessarie per calcolare il prodotto di tutti i sottogruppi di dimensioni n-1?
Chiaramente puoi farlo in (n-1)*n
moltiplicazioni.
Per chiarire, l'output è n
prodotti diversi e le uniche operazioni consentite oltre alla lettura e alla scrittura in memoria sono la moltiplicazione, l'addizione e la sottrazione.
Esempio
Se l'ingresso ha tre numeri 2,3,5
, allora l'uscita è tre numeri 15 = 3*5
, 10 = 2*5
e 6 = 2*3
.
Criterio vincente
Le risposte dovrebbero fornire una formula esatta per il numero di operazioni aritmetiche che il loro codice utilizzerà in termini di n
. Per semplificarti la vita, collegherò semplicemente la n = 1000
tua formula per giudicare il suo punteggio. Più basso è il migliore.
Se è troppo difficile produrre una formula esatta per il tuo codice, puoi semplicemente eseguirlo n = 1000
e contare le operazioni aritmetiche nel codice. Una formula esatta sarebbe comunque la migliore.
Dovresti aggiungere il tuo punteggio n=1000
alla tua risposta per un facile confronto.
+
sugli indici contano? In questo caso, conta anche l'indicizzazione di array? (dal momento che è dopo tutto lo zucchero sintattico per l'aggiunta e la dereferenziazione).
(n-1)*n
moltiplicazioni Intendi (n-2)*n
, vero?