Dato un numero, trova le 5 cifre prima dello zero finale. 9! = 362880 così f (9) = 36288 10! = 3628800 so f (10) = 36288 20! = 2432902008176640000 quindi f (20) = 17664 Find f (1.000.000.000.000)Eulero 160: trova le 5 cifre non banali del fattoriale
Per questo ho calcolato il f(10^6)
e poi f(10^12) = (f(10^6))^(10^6)
per il calcolo del f(n)
... Sto calcolando la fattoriale, eliminando qualsiasi 5 e il corrispondente 2 in modo da rimuovere tutti gli zeri finali .
Ma ho una risposta sbagliata.
C'è un problema nell'approccio o qualche errore stupido?
codice di riferimento
long long po(long long n, long long m, long long mod) {
if (m == 0) return 1;
if (m == 1) return n % mod;
long long r = po(n, m/2, mod) % mod;
if (m % 2 == 0) return (r * r) % mod;
return (((r * r) % mod) * n) % mod;
}
void foo() {
unsigned long long i, res = 1, m = 1000000 , c = 0, j, res1 = 1, mod;
mod = ceil(pow(10, 9));
cout << mod << endl;
long long a = 0, a2 = 0, a5 = 0;
for (i = 1 ; i <= m; i++) {
j = i;
while (j % 10 == 0)
j /= 10;
while (j % 2 == 0) {
j /= 2;
a2++;
}
while (j % 5 == 0) {
j /= 5;
a5++;
}
res = (res * j) % mod;
}
a = a2 - a5;
for (i = 1; i <= a; i++)
res = (res * 2) % mod;
for (i = 1; i <= 1000000; i++) {
res1 = (res1 * res) % mod;
}
cout << res1 << endl;
}
Puoi pubblicare il tuo codice? – 0605002
inoltre, non è un progetto euler qualcosa che dovresti risolvere da solo piuttosto che chiedere aiuto ... solo dicendo se lasci che qualcun altro lo risolva per te, non solo non otterrai nulla da esso ma anche la risposta sarà ora su COSÌ, per tutti da vedere. – hackartist