好的,这里是起题战争第一期。
T1 集合
给定正整数 \(n\),计算 \(n\) 个元素的集合 \({1,2,⋯,n}\),所有非空子集和的乘积取模 \(998244353\) 后的结果。
首先,一个大小为 \(n\) 的集合有 \(2^n - 1\) 个非空子集,考虑dp求得每一种答案的数量,然后根据欧拉定理可求得答案。
代码:
#include <fstream>
using namespace std;
using ll = long long;
const int kMaxN = 1e5 + 1, kMod = 998244353;
ifstream cin("set.in");
ofstream cout("set.out");
ll n, ans = 1, num[kMaxN];
ll fpow(ll a, ll b) {
ll res = 1;
for (; b; (b & 1) && (res = res * a % kMod), b >>= 1, a = a * a % kMod) {
}
return res;
}
int main() {
cin >> n;
num[0] = 1;
for (ll i = 1; i <= n; i++) {
for (ll j = i * (i + 1) / 2; j >= i; j--) {
num[j] = (num[j] + num[j - i]) % (kMod - 1);
}
}
for (ll i = 1; i <= n * (n + 1) / 2; i++) {
ans = ans * fpow(i, num[i]) % kMod;
}
cout << ans << '\n';
return 0;
}
T1的题已被破坏QWQ