求 (1! + 2! + 3! + 4! + ...... n!) % 494273703. n <= 1000000000000000000. c语言
时间: 2023-11-14 12:13:11 浏览: 93
Scratch图形化编程语言入门与进阶指南
这道题目需要用到大数阶乘和取模的知识。由于n的范围非常大,我们需要使用高精度计算来计算阶乘和。同时,由于结果需要对一个很大的质数取模,我们需要使用快速幂算法来计算幂的模运算。
以下是C语言的代码实现:
```
#include <stdio.h>
#include <stdlib.h>
#define MOD 494273703
typedef long long ll;
ll pow_mod(ll a, ll b, ll p) {
ll ans = 1 % p;
while (b) {
if (b & 1) ans = ans * a % p;
a = a * a % p;
b >>= 1;
}
return ans;
}
ll fac_mod(ll n, ll p) {
ll ans = 1 % p;
for (ll i = 1; i <= n; i++) {
ans = ans * i % p;
}
return ans;
}
ll fac_sum_mod(ll n, ll p) {
if (n == 0) return 0;
if (n == 1) return 1;
ll k = n / p;
ll ans = pow_mod(2, k, p) * fac_sum_mod(n / p, p) % p;
for (ll i = k * p + 1; i <= n; i++) {
ans = (ans + fac_mod(i, p)) % p;
}
return ans;
}
int main() {
ll n;
scanf("%lld", &n);
printf("%lld\n", fac_sum_mod(n, MOD));
return 0;
}
```
阅读全文