sommatorie

Stato
Discussione chiusa ad ulteriori risposte.

Oromis92

Utente Silver
22 Dicembre 2007
102
12
2
84
ok, non è difficile, ma non è neanche stupido come si potrebbe pensare.

esercizio: scrivere il più VELOCE programma che calcoli la somma di tutti i numeri interi da 1 a 10000000000 (10 miliardi)

ecco la mia soluzione (sbirciate solo se avete già scritto e testato il vostro programma)
[ot]
Codice:
#!/usr/bin/perl
$n=shift or die "usage: $0 <numero>\n";
$sum= ($n*($n+1))/2;
print "la somma di tutti i numeri compresi tra 1 e $n è $sum\n";
[/ot]
tempo di esecuzione:
Codice:
oromis92@localhost:~/Scrivania/perl$ time perl sum.pl 10000000000
la somma di tutti i numeri compresi tra 1 e 10000000000 è 5.0000000005e+19

real     0m0.006s
user    0m0.000s
sys     0m0.004s
6 millesimi non mi batte nessuno
 
Dovrebbe andare
[Python]
Codice:
#!/usr/bin/python
print (10000000000+1)*5000000000
Una riga :asd:
Se non erro dovrebbe essere il metodo di Gauss il mio.
 
si per risolverlo intendevo una cosa del genere...

[ot]
in realtà speravo che qualcuno postasse una cosa tipo:
Codice:
$n=shift or die "usage: $0 <numero>\n";
$x=$n;
$i=$n-1;
while($i>0){
$n = $n+$i;
$i--;
}
print "la somma di tutti i numeri compresi tra 1 e $x � $n\n";

così da dimostrargli che non sempre il procedimento "brute" è più veloce, anzi... una cosa del genere ci mette quasi un'ora e mezzo a risolverlo...
[/ot]

oh, bhe si.... il mio prgramma fa la stessa cosa con qualunque numero... non solo con 100000000000
 
All'inizio io avevo provato a farlo con un for i in xrange, ma poi di dava problemi con i numeri troppo lunghi e così mi sono ricordato di Gauss :asd:
 
nn so se funzioni (mi sa che va in overflow) nn l'ho testato cmq ecco:

Codice:
print sum(xrange(1,10000000000))

inizialmente volevo fare così, prima di ricordarmi del caro gauss
 
non so se giusta ma ecco in C :
Codice:
#include <stdio.h>
main(int ri){
         ri = (10000000000+1)*5000000000;
         printf("\n %d \n", ri);
}
ecco il tempo
Codice:
kripnos@desktop:~/c$ time ./somm.bin

-611454464

real     0m0.012s
user    0m0.000s
sys     0m0.006s
 
mi correggo:
Codice:
#include <stdio.h>                                               // 1
int main(long int ri){                                             // 2
         ri = (10000000000+1)*5000000000;         // 3
         printf("\n %d \n", ri);                                  //  4
}                                                                         //   5
 
Stato
Discussione chiusa ad ulteriori risposte.