P6271 [湖北省队互测2014]一个人的数论
P6271 [湖北省队互测2014]一个人的数论
给你 ,求:
。
先化简原式,有:
对于 ,我们知道它可以表示为一个关于 的 次多项式,设其为:
我们可以用高斯消元在 内算出系数 的值,再算出原式的值。
搞定上面那个后,原式可化为:
后面那部分筛一下即可。
#include <bits/stdc++.h>
#define int long long
int read()
{
int x = 0, f = 1;
char c = getchar();
while (c < '0' || c > '9')
{
if (c == '-')
f = -1;
c = getchar();
}
while (c >= '0' && c <= '9')
{
x = x * 10 + c - '0';
c = getchar();
}
return x * f;
}
const int mod = 1e9 + 7;
int qpow(int a, int b)
{
if (b < 0)
b += mod - 1;
int ret = 1;
for (; b; b >>= 1, a = 1ll * a * a % mod)
if (b & 1)
ret = 1ll * ret * a % mod;
return ret;
}
int inv(int a)
{
return qpow(a, mod - 2);
}
int m, w;
int p[1007], a[1007];
int mat[105][105], f[105], sum[105];
void init()
{
for (int i = 1; i <= m + 2; ++i)
{
sum[i] = (qpow(i, m) + sum[i - 1]) % mod;
mat[i - 1][0] = 1, mat[i - 1][m + 2] = sum[i];
for (int j = 1; j <= m + 1; ++j)
mat[i - 1][j] = mat[i - 1][j - 1] * i % mod;
}
}
//行:[0, m + 1],列:[0, m + 2]
void gauss()
{
for (int i = 0; i <= m + 1; ++i)
{
int r = i;
for (int j = i + 1; j <= m + 1; ++j)
if (mat[j][i] > mat[r][i])
r = j;
std::swap(mat[r], mat[i]);
int div = inv(mat[i][i]);
for (int j = i; j <= m + 2; ++j)
mat[i][j] = mat[i][j] * div % mod;
for (int j = i + 1; j <= m + 1; ++j)
{
div = mat[j][i];
for (int k = i; k <= m + 2; ++k)
mat[j][k] = ((mat[j][k] - mat[i][k] * div % mod) % mod + mod) % mod;
}
}
f[m + 1] = mat[m + 1][m + 2];
for (int i = m; i >= 0; --i)
{
f[i] = mat[i][m + 2];
for (int j = i + 1; j <= m + 1; ++j)
f[i] = ((f[i] - mat[i][j] * f[j] % mod) % mod + mod) % mod;
}
return;
}
signed main()
{
m = read(), w = read();
for (int i = 1; i <= w; ++i)
p[i] = read(), a[i] = read();
init();
gauss();
int ans = 0;
for (int i = 0; i <= m + 1; ++i)
{
int tmp = 1;
for (int j = 1; j <= w; ++j)
tmp = qpow(p[j], a[j] * i % (mod - 1)) * (1ll - qpow(p[j], m - i) + mod) % mod * tmp % mod;
ans = (ans + tmp * f[i] % mod) % mod;
}
printf("%lld\n", ans);
return 0;
}
本文来自博客园,作者:蒟蒻orz,转载请注明原文链接:https://www.cnblogs.com/orzz/p/18122053
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通