Cho số tìm 5 chữ số trước dấu 0. = 362880 để f (9) = 36288 10! = 3628800 để f (10) = 36288 20! = 2432902008176640000 nên f (20) = 17.664 Find f (1.000.000.000.000)Euler 160: Tìm 5 số không nhỏ của giai thừa
Đối với điều này tôi đã tính toán các f(10^6)
và sau đó f(10^12) = (f(10^6))^(10^6)
để tính f(n)
... Tôi đang tính toán thừa bằng cách loại bỏ bất kỳ 5 và tương ứng 2 để tất cả các sốkhông được xóa.
Nhưng tôi nhận được câu trả lời sai.
Có vấn đề gì trong cách tiếp cận hoặc một số sai lầm ngớ ngẩn không?
Mã để tham khảo
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;
}
Bạn có thể đăng mã của mình không? – 0605002
Ngoài ra, không phải là dự án euler một cái gì đó bạn nên giải quyết chính mình hơn là yêu cầu giúp đỡ ... chỉ cần nói nếu bạn để cho người khác giải quyết nó cho bạn, không chỉ bạn sẽ không nhận được gì từ nó mà còn câu trả lời sẽ được trên SO cho mọi người xem. – hackartist