【bzoj3601】一个人的数论 莫比乌斯反演+莫比乌斯函数性质+高斯消元
Description
.jpg)
Sol
这题好难啊QAQ
反正不看题解我对自然数幂求和那里是一点思路都没有qwq
先推出一个可做一点的式子:
\(f(n)=\sum_{k=1}^{n}[(n,k)=1]k^d\)
\(=\sum_{k=1}^{n}k^d\sum_{e|n,e|k}\mu(e)\)
\(=\sum_{e|n}\sum_{k=1}^{n/e}(ek)^d\mu(e)\)
\(=\sum_{e|n}e^d\mu(e)\sum_{k=1}^{n/e}k^d\)
我们假装(反正就是可以但是我太弱了不会证)后面的式子是一个d+1次的关于n的多项式,因为d很小所以我们用高斯消元求出来系数ai,之后得到:
原式
\(=\sum_{e|n}e^d\mu(e)\sum_{k=1}^{d+1}a_k(n/e)^k\)
\(=\sum_{k=1}^{d+1}a_k\sum_{e|n}e^d\mu(e)(n/e)^k\)
设\(fk(n)=\sum_{e|n}e^d\mu(e)(n/e)^k\)
因为\(e^d\mu(e)\)与\((n/e)^i\)都是积性函数,所以他们的狄利克雷卷积\(fk(n)\)也是积性函数
我们对于n分解质因数,对于每种质数的qi次幂单独计算,然后乘起来。
显然这样答案等于
\(1^d*\mu(1)*pi^{qi^{k}}+pi^d*\mu(pi)*p^{(qi-1)^{k}}\)
题目都帮你分解好了就是一种暗示qwq
看到乘数里面有莫比乌斯函数,就要往次幂上想,然后只保留零次幂和一次幂(逃
这个可以直接暴力,ai还是已知的,那么直接枚举d即可。
Code
#include <bits/stdc++.h>
#define ll long long
using namespace std;
ll ans,v[105][105],pa[1005],pb[1005],P=1e9+7;int n,d;
ll ksm(ll a,ll b){ll res=1;for(;b;b>>=1,a=a*a%P) if(b&1) res=res*a%P;return res;}
void gauss(int n)
{
for(int i=1,k,t;i<=n;i++)
{
for(int j=i;j<=n;j++) if(v[j][i]) for(k=i;k<=n+1;k++) swap(v[j][k],v[i][k]);
for(int j=i+1;j<=n;j++) if(i!=j) for(t=1ll*v[j][i]*ksm(v[i][i],P-2)%P,k=i;k<=n+1;k++) v[j][k]=(v[j][k]-1ll*t*v[i][k]%P+P)%P;
}
for(int i=n;i;i--)
{
for(int j=n;j>i;j--) v[i][n+1]=(v[i][n+1]-1ll*v[i][j]*v[j][n+1]%P+P)%P;
v[i][n+1]=1ll*v[i][n+1]*ksm(v[i][i],P-2)%P;
}
}
int main()
{
scanf("%d%d",&d,&n);
for(int i=1;i<=d+1;i++)
{
for(int j=1;j<=d+1;j++) v[i][j]=ksm(i,j);
for(int j=1;j<=i;j++) v[i][d+2]=(v[i][d+2]+ksm(j,d))%P;
}
gauss(d+1);
for(int i=1;i<=n;i++) scanf("%lld%lld",&pa[i],&pb[i]);
for(int i=1,tmp=1;i<=d+1;i++,tmp=1)
{
for(int j=1;j<=n;j++) tmp=1ll*tmp*(ksm(pa[j],pb[j]*i)-ksm(pa[j],d+(pb[j]-1)*i)%P+P)%P;
ans=(ans+1ll*tmp*v[i][d+2]%P)%P;
}
printf("%lld\n",ans);
}
【bzoj3601】一个人的数论 莫比乌斯反演+莫比乌斯函数性质+高斯消元的更多相关文章
- 【bzoj3601】一个人的数论 莫比乌斯反演+高斯消元
题目描述 题解 莫比乌斯反演+高斯消元 (前方高能:所有题目中给出的幂次d,公式里为了防止混淆,均使用了k代替) #include <cstdio> #include <cstrin ...
- 【BZOJ3601】一个人的数论 高斯消元+莫比乌斯反演
[BZOJ3601]一个人的数论 题解:本题的做法还是很神的~ 那么g(n)如何求呢?显然它的常数项=0,我们可以用待定系数法,将n=1...d+1的情况代入式子中解方程,有d+1个方程和d+1个未知 ...
- [bzoj3601] 一个人的数论 [莫比乌斯反演+高斯消元]
题面 传送门 思路 这题妙啊 先把式子摆出来 $f_n(d)=\sum_{i=1}^n[gcd(i,n)==1]i^d$ 这个$gcd$看着碍眼,我们把它反演掉 $f_n(d)=\sum_{i=1}^ ...
- BZOJ3601 一个人的数论 【数论 + 高斯消元】
题目链接 BZOJ3601 题解 挺神的 首先有 \[ \begin{aligned} f(n) &= \sum\limits_{x = 1}^{n} x^{d} [(x,n) = 1] \\ ...
- LOJ 2542 「PKUWC2018」随机游走 ——树上高斯消元(期望DP)+最值反演+fmt
题目:https://loj.ac/problem/2542 可以最值反演.注意 min 不是独立地算从根走到每个点的最小值,在点集里取 min ,而是整体来看,“从根开始走到点集中的任意一个点就停下 ...
- BZOJ3601 一个人的数论 莫比乌斯反演、高斯消元/拉格朗日插值
传送门 题面图片真是大到离谱-- 题目要求的是 \(\begin{align*}\sum\limits_{i=1}^N i^d[gcd(i,n) == 1] &= \sum\limits_{i ...
- BZOJ 3601 一个人的数论 ——莫比乌斯反演 高斯消元
http://www.cnblogs.com/jianglangcaijin/p/4033399.html ——lych_cys 我还是太菜了,考虑一个函数的值得时候,首先考虑是否积性函数,不行的话就 ...
- 【bzoj4804】欧拉心算 莫比乌斯反演+莫比乌斯函数性质+线性筛
Description 给出一个数字N 求\(\sum_{i=1}^{n}\sum_{j=1}^{n}\varphi(gcd(i,j))\) Input 第一行为一个正整数T,表示数据组数. 接下来T ...
- BZOJ3601. 一个人的数论(狄利克雷卷积+高斯消元)及关于「前 $n$ 个正整数的 $k$ 次幂之和是关于 $n$ 的 $k+1$ 次多项式」的证明
题目链接 https://www.lydsy.com/JudgeOnline/problem.php?id=3601 题解 首先还是基本的推式子: \[\begin{aligned}f_d(n) &a ...
随机推荐
- keil:C语言里面调用汇编程序
C语言直观,汇编效率高,C里面嵌入汇编是很好的选择. 路径大概如图: mian.c是我的C语言程序,Func.s是汇编程序. 主要是Init_1这个函数的实现在汇编文件里面,使用汇编实现的. 首先在C ...
- js中slice,splice和split方法的区别
1.slice(数组) 用法:array.slice(start,end) 解释:该方法是对数组进行部分截取,并返回一个数组副本:参数start是截取的开始数组索引,end参数等于你要取的最后一个字符 ...
- BurpSuite—-decoder模块(编码模块)
一.简介 Burp Decoder是Burp Suite中一款编码解码工具,将原始数据转换成各种编码和哈希表的简单工具,它能够智能地识别多种编码格式采用启发式技术. 二.模块说明 通过有请求的任意模块 ...
- Spring Cloud Eureka 4 (高可用服务注册中心)
在微服务这样的分布式环境中,我们需要充分考虑发生故障的情况,所以在生产环境中必须考虑对各个组件进行高可用部署,对于服务注册中心也是一样. Eureka Server 的高可用实际上就是讲自己作为服务向 ...
- java通过反射了解集合泛型的本质
- Python文件修改和常用方法
为了更好地说明接下来的文件修改操作,我们有必要先来学习下文件操作的常用方法. 一.文件处理中的常用方法 #!/usr/bin/env python3 #-*- coding:utf-8 -*- # w ...
- ParallaxEffect
[ParallaxEffect] ParallaxEffect是一种用简单的2D贴图来模拟3D效果的简易方法.譬如一棵树,摄像机俯视时,当树远离摄像机时,树顶偏远,当树靠近,树顶偏近.苹果官方Adve ...
- Hadoop之HDFS(三)HDFS的JAVA API操作
HDFS的JAVA API操作 HDFS 在生产应用中主要是客户端的开发,其核心步骤是从 HDFS 提供的 api中构造一个 HDFS 的访问客户端对象,然后通过该客户端对象操作(增删改查)HDFS ...
- python拷贝文件小程序(windows)
#!/usr/bin/python import os source='F:\\lh.jpg' target='E:\\' copy_command="xcopy %s %s"%( ...
- jquery 获取url 参数方法 以及 解决url中文问题
//jQuery 动态给a 标签赋值 跳转 新的页面打开. /* <a class="btn btn-success" id="test" target= ...