【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】一个人的数论(数论)的更多相关文章

  1. 【BZOJ3601】一个人的数论 高斯消元+莫比乌斯反演

    [BZOJ3601]一个人的数论 题解:本题的做法还是很神的~ 那么g(n)如何求呢?显然它的常数项=0,我们可以用待定系数法,将n=1...d+1的情况代入式子中解方程,有d+1个方程和d+1个未知 ...

  2. 【bzoj3601】一个人的数论 莫比乌斯反演+莫比乌斯函数性质+高斯消元

    Description Sol 这题好难啊QAQ 反正不看题解我对自然数幂求和那里是一点思路都没有qwq 先推出一个可做一点的式子: \(f(n)=\sum_{k=1}^{n}[(n,k)=1]k^d ...

  3. 【bzoj3601】一个人的数论 莫比乌斯反演+高斯消元

    题目描述 题解 莫比乌斯反演+高斯消元 (前方高能:所有题目中给出的幂次d,公式里为了防止混淆,均使用了k代替) #include <cstdio> #include <cstrin ...

  4. 【bzoj3601】一个人的数论(莫比乌斯反演+拉格朗日插值)

    传送门 题意: 求\[ \sum_{i=1}^{n}i^d[gcd(i,n)=1] \] 思路: 我们对上面的式子进行变换,有: \[ \begin{aligned} &\sum_{i=1}^ ...

  5. 【BZOJ3601】一个人的数论

    题目链接 题意简述 求小于 n 且与 n 互质的数的 k 次方之和. Sol 要求的东西: \[\sum_{i=1}^n i^k [gcd(i,n)=1]\] 枚举 gcd 上个莫比乌斯函数: \[\ ...

  6. [BZOJ4772]显而易见的数论(数论)

    4772: 显而易见的数论 Time Limit: 40 Sec  Memory Limit: 256 MBSubmit: 76  Solved: 32[Submit][Status][Discuss ...

  7. 洛谷$P5330\ [SNOI2019]$数论 数论

    正解:数论 解题报告: 传送门$QwQ$ ,,,这题还蛮妙的$QwQ$(,,,其实所有数论题对我来说都挺妙的$kk$然后我真的好呆昂我理解了好久$QAQ$ 考虑先建$Q$个点,编号为$[0,Q)$,表 ...

  8. NOIP复习之1 数学数论

    noip一轮复习真的要开始啦!!! 大概顺序是这样的 1.数学 2.搜索贪心 3.数据结构 4.图论 5.dp 6.其他 数学 1.数论 数论被称为数学皇冠上的明珠,他的重要性主要在于它是其他学习的祖 ...

  9. BZOJ3601 一个人的数论 【数论 + 高斯消元】

    题目链接 BZOJ3601 题解 挺神的 首先有 \[ \begin{aligned} f(n) &= \sum\limits_{x = 1}^{n} x^{d} [(x,n) = 1] \\ ...

随机推荐

  1. java中流的简单小结

    1.分类 按字节流分: InputStream(输出流)     OutputStream(输入流) 按字符流分: Reader Writer  提示:输入.输出是站在程序的角度而言,所有输入流是“读 ...

  2. 解决scrapy报错:ModuleNotFoundError: No module named 'win32api'

    ModuleNotFoundError: No module named 'win32api' 表示win32api未安装 解决办法: 下载对应python版本的win32api,并安装. 下载地址: ...

  3. [转帖] 百度知道: KMS 和OSPP

    https://zhidao.baidu.com/question/1819332749671662308.html Key Management Service (KMS).目前Windows Se ...

  4. 动态渲染页面爬取(Python 网络爬虫) ---Selenium的使用

    Selenium 的使用 Selenium 是一个自动化测试工具,利用它可以驱动浏览器执行特定的动作,如点击.下拉等操作,同时还可以获取浏览器当前呈现的页面的源代码,做到可见即可爬.对于一些JavaS ...

  5. java获取本机ip(排除虚拟机等一些ip)最终解,总算找到方法了

    本文参考https://blog.csdn.net/u011809209/article/details/77236602 本文参考https://blog.csdn.net/yinshuomail/ ...

  6. WPF 将数据源绑定到TreeView控件出现界面卡死的情况

    首先来谈一下实现将自定义的类TreeMode绑定到TreeView控件上的一个基本的思路,由于每一个节点都要包含很多自定义的一些属性信息,因此我们需要将该类TreeMode进行封装,TreeView的 ...

  7. 如何在mac下安装php

    步骤如下: 1.下载php源码并解压 2.进入php源码并configure 3.安装openssl 4.sudo make及make test 5.sudo make install 具体命令如下: ...

  8. 原型链上的call方法集合

    1. Object.prototype.toString.call(value) // 返回数据的类型 // "[object Object]" 等 2. Array.protot ...

  9. debug方法

    debug as -> spring boot->开始了 可以添加 ,, 来进行向下步骤:使用其他方法(在方法内打点) 一步步F6就可以了

  10. Bootstrap之网格类

    代码: <!DOCTYPE html> <html lang="zh"> <head> <meta charset="UTF-8 ...