题目描述 求 (1! + 2! + 3! + ...... n!) % 998244353. n <= 1000000.
时间: 2023-11-15 16:02:45 浏览: 182
这道题目要求我们计算从1到n的阶乘之和,并对998244353取模。我们可以使用循环来计算每个数的阶乘,并将它们相加。由于n的范围很大,我们需要使用long long类型来存储阶乘和结果。同时,我们需要使用快速幂算法来对结果取模,以避免溢出。
以下是代码实现:
```
#include <iostream>
using namespace std;
const int MOD = 998244353;
long long pow_mod(long long a, long long b) {
long long res = 1;
while (b) {
if (b & 1) res = res * a % MOD;
a = a * a % MOD;
b >>= 1;
}
return res;
}
int main() {
int n;
cin >> n;
long long ans = 0, fac = 1;
for (int i = 1; i <= n; i++) {
fac = fac * i % MOD;
ans = (ans + fac) % MOD;
}
ans = ans * pow_mod(2, MOD - 2) % MOD;
cout << ans << endl;
return 0;
}
```
相关问题
题目描述 求 (1! + 2! + 3! + ...... n!) % 998244353. n <= 1000000.运用c语言解决
这道题目要求计算1到n的阶乘的和,并对998244353取模。可以使用循环来计算每个数的阶乘,并将其加入到总和中。需要注意的是,由于n的范围很大,需要使用long long类型来存储阶乘和总和,并在计算阶乘时进行取模操作,以避免溢出。以下是一个C语言的实现代码:
```
#include <stdio.h>
#define MOD 998244353
int main() {
int n;
long long sum = 0, fact = 1;
scanf("%d", &n);
for (int i = 1; i <= n; i++) {
fact = (fact * i) % MOD; sum = (sum + fact) % MOD;
}
printf("%lld\n", sum);
return 0;
}
```
题目描述 编写一个求n!的函数,主函数中调用这个函数,计算sum=1!+2!+3!+......+10! 输入 无 输出 输出1!+2!+3!+......+10!
这道题目要求编写一个递归函数来计算1!+2!+3!+……+n!的值。下面是一个可能的解法:
```
#include <iostream>
using namespace std;
long factorial(int n) {
if (n == 0) {
return 1;
} else {
return n * factorial(n-1);
}
}
long sumFactorials(int n) {
if (n == 0) {
return 0;
} else {
return factorial(n) + sumFactorials(n-1);
}
}
int main() {
int n = 10;
long sum = sumFactorials(n);
cout << "1!+2!+3!+...+" << n << "! = " << sum << endl;
return 0;
}
```
这个程序定义了两个递归函数,`factorial`和`sumFactorials`。`factorial`函数计算n的阶乘,`sumFactorials`函数计算1!+2!+3!+……+n!的值。在`sumFactorials`函数中,我们使用递归来计算每个阶乘的值,并将它们相加。
阅读全文