【BZOJ3601】一个人的数论(数论)
【BZOJ3601】一个人的数论(数论)
题面
BZOJ
怎么这图片这么大啊。。。
题解
要求的是\(\displaystyle \sum_{i=1}^n [gcd(i,n)=1]i^d\)
然后把\(gcd=1\)给拆了,\(\displaystyle \sum_{i=1}^n i^d\sum_{x|i,x|n}\mu(x)\)。
然后再把\(\mu\)丢掉前面去,\(\displaystyle \sum_{x|n}\mu(x)x^d\sum_{i=1}^{n/x}i^d\)
后面一半是自然数幂和,随便怎么搞都行。然而前面似乎就没法搞了QwQ。
首先自然数幂和可以写成一个多项式。
对于\(\sum_{i}i^d\)而言,一定可以写成一个\(d+1\)次多项式。
假装这个多项式的系数是\(a_i\)。
那么式子就可以改写成:\(\displaystyle \sum_{k=0}^d a_k\sum_{x|n}\mu(x)x^d[\frac{n}{x}]^k\)
后面这个东西很明显就是三个积性函数乘起来的,所以后面这个东西也是一个积性函数。
而现在已经给定了\(n\)的分解情况,那么只需要对于每个质数求解贡献。
而每个质因子的出现次数超过\(1\)的时候贡献就是\(0\),所以只有出现\(0\)次或者\(1\)次的时候有贡献,那么后面这个东西似乎就很好算的样子啦。
现在的问题就回到了如何求解\(a_i\)上面。
这个东西可以待定系数+高斯消元直接爆算出解。
也可以拉格朗日插值直接算。
#include<iostream>
#include<cstdio>
using namespace std;
#define MAX 105
#define MOD 1000000007
inline int read()
{
int x=0;bool t=false;char ch=getchar();
while((ch<'0'||ch>'9')&&ch!='-')ch=getchar();
if(ch=='-')t=true,ch=getchar();
while(ch<='9'&&ch>='0')x=x*10+ch-48,ch=getchar();
return t?-x:x;
}
int ans,d,W,a[MAX],p[MAX],b[MAX],c[MAX],pro[MAX];
int fpow(int a,int b){int s=1;while(b){if(b&1)s=1ll*s*a%MOD;a=1ll*a*a%MOD;b>>=1;}return s;}
void pre()
{
for(int i=1;i<=d+2;++i)p[i]=(p[i-1]+fpow(i,d))%MOD;b[0]=1;
for(int i=0;i<=d+1;++i)
{
for(int j=i+1;j;--j)b[j]=(b[j-1]+MOD-1ll*b[j]*(i+1)%MOD)%MOD;
b[0]=1ll*b[0]*(MOD-i-1)%MOD;
}
for(int i=0;i<=d+1;++i)
{
int s=p[i+1],inv=fpow(i+1,MOD-2);
for(int j=0;j<=d+1;++j)if(i!=j)s=1ll*s*fpow((i-j+MOD)%MOD,MOD-2)%MOD;
b[0]=1ll*b[0]*(MOD-inv)%MOD;
for(int j=1;j<=d+2;++j)b[j]=(MOD-1ll*(b[j]+MOD-b[j-1])*inv%MOD)%MOD;
for(int j=0;j<=d+2;++j)a[j]=(a[j]+1ll*s*b[j])%MOD;
for(int j=d+2;j;--j)b[j]=(b[j-1]+MOD-1ll*b[j]*(i+1)%MOD)%MOD;
b[0]=1ll*b[0]*(MOD-i-1)%MOD;
}
}
int main()
{
d=read();W=read();pre();
for(int i=0;i<=d+1;++i)pro[i]=1;
while(W--)
{
int p=read(),v=read(),n=fpow(p,v),inv=fpow(p,MOD-2),pd=fpow(p,d);
for(int k=0;k<=d+1;++k)
{
int ret=(fpow(n,k)+MOD-1ll*pd*fpow(1ll*n*inv%MOD,k)%MOD)%MOD;
pro[k]=1ll*pro[k]*ret%MOD;
}
}
for(int i=0;i<=d+1;++i)ans=(ans+1ll*a[i]*pro[i])%MOD;
printf("%d\n",ans);
return 0;
}
【BZOJ3601】一个人的数论(数论)的更多相关文章
- 【BZOJ3601】一个人的数论 高斯消元+莫比乌斯反演
[BZOJ3601]一个人的数论 题解:本题的做法还是很神的~ 那么g(n)如何求呢?显然它的常数项=0,我们可以用待定系数法,将n=1...d+1的情况代入式子中解方程,有d+1个方程和d+1个未知 ...
- 【bzoj3601】一个人的数论 莫比乌斯反演+莫比乌斯函数性质+高斯消元
Description Sol 这题好难啊QAQ 反正不看题解我对自然数幂求和那里是一点思路都没有qwq 先推出一个可做一点的式子: \(f(n)=\sum_{k=1}^{n}[(n,k)=1]k^d ...
- 【bzoj3601】一个人的数论 莫比乌斯反演+高斯消元
题目描述 题解 莫比乌斯反演+高斯消元 (前方高能:所有题目中给出的幂次d,公式里为了防止混淆,均使用了k代替) #include <cstdio> #include <cstrin ...
- 【bzoj3601】一个人的数论(莫比乌斯反演+拉格朗日插值)
传送门 题意: 求\[ \sum_{i=1}^{n}i^d[gcd(i,n)=1] \] 思路: 我们对上面的式子进行变换,有: \[ \begin{aligned} &\sum_{i=1}^ ...
- 【BZOJ3601】一个人的数论
题目链接 题意简述 求小于 n 且与 n 互质的数的 k 次方之和. Sol 要求的东西: \[\sum_{i=1}^n i^k [gcd(i,n)=1]\] 枚举 gcd 上个莫比乌斯函数: \[\ ...
- [BZOJ4772]显而易见的数论(数论)
4772: 显而易见的数论 Time Limit: 40 Sec Memory Limit: 256 MBSubmit: 76 Solved: 32[Submit][Status][Discuss ...
- 洛谷$P5330\ [SNOI2019]$数论 数论
正解:数论 解题报告: 传送门$QwQ$ ,,,这题还蛮妙的$QwQ$(,,,其实所有数论题对我来说都挺妙的$kk$然后我真的好呆昂我理解了好久$QAQ$ 考虑先建$Q$个点,编号为$[0,Q)$,表 ...
- NOIP复习之1 数学数论
noip一轮复习真的要开始啦!!! 大概顺序是这样的 1.数学 2.搜索贪心 3.数据结构 4.图论 5.dp 6.其他 数学 1.数论 数论被称为数学皇冠上的明珠,他的重要性主要在于它是其他学习的祖 ...
- BZOJ3601 一个人的数论 【数论 + 高斯消元】
题目链接 BZOJ3601 题解 挺神的 首先有 \[ \begin{aligned} f(n) &= \sum\limits_{x = 1}^{n} x^{d} [(x,n) = 1] \\ ...
随机推荐
- ssm知识点总结
项目名称:教育网—在线调查系统 项目总体流程图: 设计调查:调查-->包裹--->问题(增删改查) 1.调整包裹顺序 2.移动复制包裹 3.深度删除 创建调查流程分析: 主要生成surve ...
- 阿里云服务器使用镜像市场上的环境以后sql不能远程问题
关于阿里云的服务器,首先要说的就是买了以后是没有环境的,什么都需要自己配置,也是在这个上面栽了很多跟头最后去的镜像市场买的一个IIS8+SQL2016的asp.net环境 怎么说呢,感觉有些问题的本源 ...
- 爬虫——scrapy框架
Scrapy是一个异步处理框架,是纯Python实现的爬虫框架,其架构清晰,模块之间的耦合程度低,可拓展性强,可以灵活完成各种需求.我们只需要定制几个模块就可以轻松实现一个爬虫. 1.架构 Scra ...
- K3CLOUD常用数据表
一.数据库查询常用表 --查询数据表select * from ( select convert(varchar(4000),t1.FKERNELXML.query('//TableName')) a ...
- logback框架之——日志分割所带来的潜在问题
源码: logback-test.xml文件如下,有2个需要我们重点关注的参数: fileNamePattern:这里的日志文件名变动的部分是年月日时,外加1个文件分割自增变量,警告,年月日时的数值依 ...
- python之路--进程内容补充
一. 进程的其他方法 进程id, 进程名字, 查看进程是否活着(is_alive()), terminate()发送结束进程的信号 import time import os from multipr ...
- 关于对ProgressBar定义模板的一些总结
在之前的博客中曾经写到了一篇关于如何定义圆形进度条的文章,今天就ProgressBar再来进行一些总结,首先来介绍一下ProgressBar的结构,ProgressBar控件的模板有两个部分,我们在定 ...
- 如何在DataTemplate中绑定RadioButton的Checked事件
在我们的项目中经常要用到数据模板,最近做的一个项目中在数据模板中要放一些RadioButton,其中每一个RadioButton设置了Checked事件,如果直接在View层写Checked事件的话不 ...
- Best Chrome Extensions
Best Chrome Extensions chrome://extensions/ # ghelper chrome-extension://cieikaeocafmceoapfogpffaalk ...
- 用“人话”解释不精确线搜索中的Armijo-Goldstein准则及Wolfe-Powell准则
转载请注明出处:http://www.codelast.com/ line search(一维搜索,或线搜索)是最优化(Optimization)算法中的一个基础步骤/算法.它可以分为精确的一维搜索以 ...