博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【BZOJ3601】一个人的数论
阅读量:5076 次
发布时间:2019-06-12

本文共 2027 字,大约阅读时间需要 6 分钟。

题意简述

求小于 n 且与 n 互质的数的 k 次方之和。

Sol

要求的东西:

\[\sum_{i=1}^n i^k [gcd(i,n)=1]\]

枚举 gcd 上个莫比乌斯函数:
\[\sum_{i=1}^n i^k \sum_{d|n,d|i} \mu(d)\]
交换求和顺序
\[\sum_{d|n} \mu(d) \sum_{i=1}^{\frac{n}{d}} (id)^k\]
这样就差不多没有办法继续了:
\[\sum_{d|n} \mu(d)*d^k \sum_{i=1}^{\frac{n}{d}} i^k\]

题目中给出的是 n 的分解式 , 这使得我们往积性函数上想。

发现前面的 \(\mu(d)\) 是积性函数 ,\(d^k\) 是个完全积性函数,那么就只剩下最后那个东西了。

这就是个自然质数幂嘛,它是个关于 \(x=\frac{n}{d}\)\(k+1\)次多项式,这样子我们可以把这个多项式的系数直接高斯消元或着拉格朗日插值给弄出来,假设系数是 \(a_i\) ,那么就是:

\[\sum_{d|n} \mu(d)*d^k \sum_{i=0}^{k+1} a_i\bigg(\frac{n}{d}\bigg)^i\]
交换个求和顺序就好了:

\[\sum_{i=0}^{k+1}a_i\sum_{d|n} \mu(d)*d^k \bigg(\frac{n}{d}\bigg)^i\]

后面就是个狄利克雷卷积,它也是个积性函数了,直接计算好 \(n\)\(p^k\) 时的结果乘起来就好了,因为莫比乌斯函数必须是在无平方因子时才不为 \(0\),所以 \(d\) 只有 \(1\)\(p\) 两种取值,直接算就行了。

code:

#include
using namespace std;template
inline void init(T&x){ x=0;char ch=getchar();bool t=0; for(;ch>'9'||ch<'0';ch=getchar()) if(ch=='-') t=1; for(;ch>='0'&&ch<='9';ch=getchar()) x=(x<<1)+(x<<3)+(ch-48); if(t) x=-x;return;}typedef long long ll;const int mod=1e9+7,phi=mod-1;template
inline void Inc(T&x,int y){x+=y;if(x>=mod) x-=mod;return;}template
inline void Dec(T&x,int y){x-=y;if(x < 0 ) x+=mod;return;}template
inline int fpow(int x,T k){int ret=1;for(;k;k>>=1,x=(ll)x*x%mod)if(k&1) ret=(ll)ret*x%mod;return ret;}inline int Sum(int x,int y){x+=y;return x>=mod? (x-mod):x;}inline int Dif(int x,int y){x-=y;return x < 0 ? (x+mod):x;}const int N=1021;int d,w;namespace Lagerange{ int coef[N],Y[N]; typedef vector
Poly; inline Poly Mul(Poly A,Poly B){ Poly Res;int szl=A.size(),szr=B.size();Res.resize(szl+szr-1); for(int i=0;i
>1;Poly A=Divide(l,mid,I),B=Divide(mid+1,r,I); return Mul(A,B); } inline void Solve(int K){ int LIM=K+2;Y[0]=0; for(int i=1;i<=LIM;++i) Y[i]=Sum(Y[i-1],fpow(i,K)); for(int i=1;i<=LIM;++i) { Poly ret=Divide(1,LIM,i); int sz=ret.size(); for(int j=0;j

转载于:https://www.cnblogs.com/NeosKnight/p/10544025.html

你可能感兴趣的文章
关于ExecuteNonQuery执行的返回值(SQL语句、存储过程)
查看>>
UVa540 Team Queue(队列queue)
查看>>
mysql数据增删改查
查看>>
shell中下载最新版本或指定版本的办法(Dockerfile 中通用)
查看>>
极客时间-左耳听风-程序员攻略-分布式架构工程设计
查看>>
akka之种子节点
查看>>
不知道做什么时
查看>>
matlab 给某一列乘上一个系数
查看>>
密码学笔记——培根密码
查看>>
Screening technology proved cost effective deal
查看>>
MAC 上升级python为最新版本
查看>>
创业老板不能犯的十种错误
查看>>
Animations介绍及实例
查看>>
判断请求是否为ajax请求
查看>>
【POJ2699】The Maximum Number of Strong Kings(网络流)
查看>>
spring boot配置跨域
查看>>
BZOJ 1996 合唱队(DP)
查看>>
进击吧!阶乘——大数乘法
查看>>
安卓学习资料推荐-25
查看>>
Mysql数据库备份和还原常用的命令
查看>>