Sto cercando di imparare il C#.
Come primo esercizio ho scritto un programmino ricorsivo per il calcolo del fattoriale per numeri un po' più grandi dell'usuale.
Sono arrivato a 9519!, ottenendo un numero che non riesco a trascrivere perché troppo lungo.
Lo allego come .zip
Su una lunghezza totale di 33741 cifre, le ultime 2377 sono '0'.
All'inizio credevo fosse un errore di calcolo. Poi, pensandoci, la motivazione è ovvia: se la cifra meno significativa diversa da zero, diventa zero in una delle moltiplicazioni, resterà tale anche in tutte le moltiplicazioni successive.
Pertanto, il numero di cifre meno significative uguali a '0' è un numero crescente all'aumentare del numero del quale viene calcolato il fattoriale.
Mi chiedevo se questa relazione fosse già stata studiata.
Mentre provo a tracciare un grafico di numTrailingZero(n!) in funzione di n, magari qualcuno di voi ne sa già qualcosa.
Fattoriale
Moderatori:
PietroBaima,
Ianero
18 messaggi
• Pagina 1 di 2 • 1, 2
4
voti
[2] Re: Fattoriale
Mi pare semplice: ci sono piu` fattori 2 che fattori 5.
Il numero di fattori 5 e` pari alla somma della serie geometrica di ragione 1/5 moltiplicato per il numero di cui calcoli il fattoriale.
La serie da` 1/4 e quindi il numero di zeri e` pari a N/4, meno qualche unita` dovuta al fatto che si dovrebbero fare i conti con interi, quindi INT(N/5)+INT(N/25)+INT(N/125)+INT(N/625)+INT(N/3125)...
Il numero di fattori 5 e` pari alla somma della serie geometrica di ragione 1/5 moltiplicato per il numero di cui calcoli il fattoriale.
La serie da` 1/4 e quindi il numero di zeri e` pari a N/4, meno qualche unita` dovuta al fatto che si dovrebbero fare i conti con interi, quindi INT(N/5)+INT(N/25)+INT(N/125)+INT(N/625)+INT(N/3125)...
Per usare proficuamente un simulatore, bisogna sapere molta più elettronica di lui
Plug it in - it works better!
Il 555 sta all'elettronica come Arduino all'informatica! (entrambi loro malgrado)
Se volete risposte rispondete a tutte le mie domande
Plug it in - it works better!
Il 555 sta all'elettronica come Arduino all'informatica! (entrambi loro malgrado)
Se volete risposte rispondete a tutte le mie domande
1
voti
[4] Re: Fattoriale
Troncamento, non arrotondamento, e mi pare di no, che debba essere dentro.
Per usare proficuamente un simulatore, bisogna sapere molta più elettronica di lui
Plug it in - it works better!
Il 555 sta all'elettronica come Arduino all'informatica! (entrambi loro malgrado)
Se volete risposte rispondete a tutte le mie domande
Plug it in - it works better!
Il 555 sta all'elettronica come Arduino all'informatica! (entrambi loro malgrado)
Se volete risposte rispondete a tutte le mie domande
0
voti
[6] Re: Fattoriale
Sì, è corretto. Questi sono i grafici per i primi e gli ultimi 120 N.
Il gioco era per provare il C#, che è entusiasmante. Ha fatto milioni di moltiplicazioni con numeri fino a 30 mila cifre in pochi minuti. Non lo credevo possibile.
Il gioco era per provare il C#, che è entusiasmante. Ha fatto milioni di moltiplicazioni con numeri fino a 30 mila cifre in pochi minuti. Non lo credevo possibile.
0
voti
[8] Re: Fattoriale
Mi hai fatto pensare ad un particolare, ho rilanciato il programma e verificato: il carico della CPU è solo il 25%. Avendo un i7 come processore, che è un quad-core, significa che il programma gira solo su uno dei quattro. Sicuramente è possibile lanciare il programma per utilizzarne di più, se non tutti. Mi chiedo se la cosa dipenda solo dal modo in cui si invoca l'eseguibile o se dipenda anche dalla compilazione. Domanda aggiunta alla lunga lista...
1
voti
[9] Re: Fattoriale
Potresti scrivere una funzione (n, m) che con n>m>0 calcola il fattoriale (n-x)(n-1)...(m)
Poi eseguirla 4 volte in 4 thread separati con diversi n ed m, alla fine moltiplicare tra loro i 4 risultati
Usare la ricorsione in questi casi, è elegante ma anti economico perché spendi un sacco di memoria per allocare la pila di sistema e quando lo fai con i microcontrollori poi te ne penti.
Così dovresti poter usare tutti i core
Poi eseguirla 4 volte in 4 thread separati con diversi n ed m, alla fine moltiplicare tra loro i 4 risultati
Usare la ricorsione in questi casi, è elegante ma anti economico perché spendi un sacco di memoria per allocare la pila di sistema e quando lo fai con i microcontrollori poi te ne penti.
Così dovresti poter usare tutti i core
- Codice: Seleziona tutto
using System;
using System.Threading;

0
voti
[10] Re: Fattoriale
@IlGuru
Il threading è argomento avanzato, previsto tra una ventina di ore di corso, ma... chi può resistere? Adesso provo
In effetti non mi interessa velocizzare il calcolo dei fattoriali da 30mila cifre, il lavoro era solo per fare qualcosa di più interessante del solito "Hello World!". Sono entusiasta del C#: un 'C++' senza tutta la verbosità e lo stantio di un linguaggio ormai troppo vecchio per essere al passo con i tempi, ma con le fondamenta che mancano a Java.
Adesso mi tirerò addosso orde di pinguini impazziti, ma Microsoft ha fatto davvero un bel lavoro.
Il threading è argomento avanzato, previsto tra una ventina di ore di corso, ma... chi può resistere? Adesso provo
In effetti non mi interessa velocizzare il calcolo dei fattoriali da 30mila cifre, il lavoro era solo per fare qualcosa di più interessante del solito "Hello World!". Sono entusiasta del C#: un 'C++' senza tutta la verbosità e lo stantio di un linguaggio ormai troppo vecchio per essere al passo con i tempi, ma con le fondamenta che mancano a Java.
Adesso mi tirerò addosso orde di pinguini impazziti, ma Microsoft ha fatto davvero un bel lavoro.
18 messaggi
• Pagina 1 di 2 • 1, 2
Chi c’è in linea
Visitano il forum: Nessuno e 3 ospiti

Elettrotecnica e non solo (admin)
Un gatto tra gli elettroni (IsidoroKZ)
Esperienza e simulazioni (g.schgor)
Moleskine di un idraulico (RenzoDF)
Il Blog di ElectroYou (webmaster)
Idee microcontrollate (TardoFreak)
PICcoli grandi PICMicro (Paolino)
Il blog elettrico di carloc (carloc)
DirtEYblooog (dirtydeeds)
Di tutto... un po' (jordan20)
AK47 (lillo)
Esperienze elettroniche (marco438)
Telecomunicazioni musicali (clavicordo)
Automazione ed Elettronica (gustavo)
Direttive per la sicurezza (ErnestoCappelletti)
EYnfo dall'Alaska (mir)
Apriamo il quadro! (attilio)
H7-25 (asdf)
Passione Elettrica (massimob)
Elettroni a spasso (guidob)
Bloguerra (guerra)





