[xsy1515]小学生数学题
题意:求$\begin{align*}\left(\sum\limits_{i=1}^n\dfrac 1i\right)\%\ p^k\end{align*}$
数学真是太可爱了==
直接推公式
设$\begin{align*}f(n,k)=\left(\sum\limits_{i=1}^n\dfrac 1i\right)\%\ p^k\end{align*}$,$\begin{align*}g(n,k)=\left(\sum\limits_{\substack{1\leq i\leq n\\p\nmid i}}\dfrac 1i\right)\%\ p^k\end{align*}$,则有$\begin{align*}f(n,k)=\left(g(n,k)+\dfrac{f\left(\left\lfloor\frac np\right\rfloor,k+1\right)}p\right)\%\ p^k\end{align*}$,下面我们来算$g$
$\begin{align*}g(n,k)&=\sum\limits_{\substack{i=a+bp\\i\leq n}}\dfrac 1i\\&=\sum\limits_{a=1}^{p-1}\sum\limits_{b=0}^{\left\lfloor\frac{n-a}p\right\rfloor}\dfrac 1{a+bp}\\&=\sum\limits_{a=1}^{p-1}\sum\limits_{b=0}^{\left\lfloor\frac{n-a}p\right\rfloor}\dfrac 1a\sum\limits_{i=0}^{k-1}\left(-\dfrac{bp}a\right)^i\\&=\sum\limits_{i=0}^{k-1}(-p)^i\sum\limits_{a=1}^{p-1}\dfrac1{a^{i+1}}\sum\limits_{b=0}^{\left\lfloor\frac{n-a}p\right\rfloor}b^i\\&=\sum\limits_{i=0}^{k-1}(-p)^i\sum\limits_{a=1}^{p-1}\dfrac1{a^{i+1}}S_i\left(\left\lfloor\dfrac{n-a}p\right\rfloor\right)\end{align*}$
最后这里$\begin{align*}S_k(n)=\sum\limits_{i=0}^ni^k\end{align*}$是自然数幂求和,直接算复杂度太高,我们可以推导一番(约定以下出现的第一类斯特林数$\left[\begin{matrix}n\\k\end{matrix}\right]$都是带正负号的)
注意到$\begin{align*}x^{\underline n}=\sum\limits_{j=1}^n\left[\begin{matrix}n\\j\end{matrix}\right]x^j\end{align*}$的$j=n$那一项等于$x^n$,我们可以把它拆出来,把$x^{\underline n}$写成$\begin{align*}n!\binom xn\end{align*}$后移项,我们得到这样的形式:$\begin{align*}x^n=n!\binom xn-\sum\limits_{j=1}^{n-1}\left[\begin{matrix}n\\j\end{matrix}\right]x^j\end{align*}$
引理$\begin{align*}\sum\limits_{l=k}^n\binom lk=\binom{n+1}{k+1}\end{align*}$可用归纳法证
假设当$n=m$时成立,那么$\begin{align*}\sum\limits_{l=k}^{m+1}\binom lk=\binom{m+1}{k+1}+\binom{m+1}k=\binom{m+2}{k+1}\end{align*}$,由归纳法,引理得证
$\begin{align*}S_k(n)&=\sum\limits_{i=0}^n\left(k!\binom ik-\sum\limits_{j=1}^{k-1}\left[\begin{matrix}k\\j\end{matrix}\right]i^j\right)\\&=k!\left(\sum\limits_{i=k}^n\binom ik\right)-\sum\limits_{i=0}^n\sum\limits_{j=1}^{k-1}\left[\begin{matrix}k\\j\end{matrix}\right]i^j\\&=k!\binom{n+1}{k+1}-\sum\limits_{j=1}^{k-1}\left[\begin{matrix}k\\j\end{matrix}\right]\sum\limits_{i=0}^ni^j\\&=\dfrac{(n+1)^{\underline{k+1}}}{k+1}-\sum\limits_{j=1}^{k-1}\left[\begin{matrix}k\\j\end{matrix}\right]S_j(n)\end{align*}$
所以我们$O(k^2)$预处理第一类斯特林数并$O(k^2)$递推求得自然数幂求和
最后看回原式:$\begin{align*}g(n,k)=\sum\limits_{i=0}^{k-1}(-p)^i\sum\limits_{a=1}^{p-1}\dfrac1{a^{i+1}}S_i\left(\left\lfloor\dfrac{n-a}p\right\rfloor\right)\end{align*}$,其中的$\dfrac1{a^{i+1}}$是关于$a$的积性函数,可以线性筛预处理求得,而因为$1\leq a\leq p-1$,所以$\left\lfloor\dfrac{n-a}p\right\rfloor$最多只有两种不同的取值,预处理两次就好了,每次计算$g$的时间复杂度是$O(kp)$,总时间复杂度是$O\left(kp\log_pn\right)$
#include<stdio.h>
typedef long long ll;
ll pow(ll a,ll b){
ll s=1;
while(b){
if(b&1)s*=a;
a*=a;
b>>=1;
}
return s;
}
ll mul(ll a,ll b,ll p){
ll tmp=(ll)((double)a*b/p+1e-6)*p;
return a*b-tmp;
}
ll pow(ll a,ll b,ll p){
ll s=1;
while(b){
if(b&1)s=mul(s,a,p);
a=mul(a,a,p);
b>>=1;
}
return s;
}
ll p,st[100][100],s1[100],s2[100],pw[100010],pr[100010];
bool np[100010];
void stir(ll n,ll k){
ll i,j,mo;
mo=pow(p,k);
st[0][0]=1;
for(i=1;i<=n;i++){
for(j=1;j<=i;j++)st[i][j]=(mul(st[i-1][j],i-1,mo)+st[i-1][j-1])%mo;
}
for(i=1;i<=n;i++){
for(j=1;j<=i;j++){
if((i+j)&1)st[i][j]=-st[i][j];
}
}
}
void gets(ll*s,ll n,ll K){
s[0]=n+1;
ll k,j,mo;
mo=pow(p,K);
for(k=1;k<=K;k++){
s[k]=1;
for(j=n+1;j>n-k;j--)s[k]=mul(s[k],(j/(k+1)*(k+1)==j)?j/(k+1):j,mo);
for(j=1;j<k;j++)s[k]=(s[k]-mul(st[k][j],s[j],mo))%mo;
}
}
void sieve(ll t,ll n,ll mo){
ll M,i,j;
M=0;
pw[1]=1;
for(i=2;i<p;i++){
if(!np[i]){
M++;
pr[M]=i;
pw[i]=pow(pow(i,n,mo),t,mo);
}
for(j=1;j<=M&&i*pr[j]<p;j++){
np[i*pr[j]]=1;
pw[i*pr[j]]=mul(pw[i],pw[pr[j]],mo);
if(i%pr[j]==0)break;
}
}
}
ll g(ll n,ll k){
stir(k,k);
gets(s1,(n-1)/p,k);
if((n-1)/p>0)gets(s2,(n-1)/p-1,k);
ll r,i,a,s,tmp,b,t,mo;
mo=pow(p,k);
r=(n-1)/p;
s=0;
b=1;
t=pow(p,k)-pow(p,k-1)-1;
for(i=0;i<k;i++){
sieve(t,i+1,mo);
tmp=0;
for(a=1;a<p&&n-a>=0;a++){
tmp=(tmp+mul(pw[a],(((n-a)/p==r)?s1:s2)[i],mo))%mo;
}
s=(s+mul(b,tmp,mo))%mo;
b*=-p;
}
return s;
}
ll f(ll n,ll k){
if(n==0)return 0;
return(g(n,k)+f(n/p,k+1)/p)%pow(p,k);
}
int main(){
ll k,n,mo;
scanf("%lld%lld%lld",&p,&k,&n);
mo=pow(p,k);
printf("%lld\n",(f(n,k)+mo)%mo);
}
[xsy1515]小学生数学题的更多相关文章
- 【XSY1515】【GDKOI2016】小学生数学题 组合数学
题目描述 给你\(n,k,p\)(\(p\)为质数),求 \[ \sum_{i=1}^n\frac{1}{i}\mod p^k \] 保证有解. \(p\leq {10}^5,np^k\leq {10 ...
- python笔记1-用python解决小学生数学题
前几天有人在群里给小编出了个数学题: 假设你有无限数量的邮票,面值分别为6角,7角,8角,请问你最大的不可支付邮资是多少元? 小编掰着手指头和脚趾头算了下,答案是:1.7元 那么问题来了?为啥是1.7 ...
- python笔记-用python解决小学生数学题【转载】
本篇转自博客:上海-悠悠 原文地址:http://www.cnblogs.com/yoyoketang/tag/python/ 前几天有人在群里给小编出了个数学题: 假设你有无限数量的邮票,面值分别为 ...
- [GDKOI2016]小学生数学题
记 $F(n)=\sum\limits_{i=1}^{n}i^{-1}$ $G(n)=\sum\limits_{i=1,i\neq jp}^{n}i^{-1}$ 我们要算$F(n)\%p^k$ 那么 ...
- GDKOI 2016
GDKOI 2016 day 1 第一题 魔卡少女 题目描述:维护一个序列,能进行以下两个操作:1.将某一个位置的值改变.2.求区间的连续子串的异或值的和. solution 因为序列的数的值都小于\ ...
- GDKOI2016 游记
2016.2.19~2.15强行广州koi被虐…… DAY 0 19日下午到达,第六次入住中大西苑宾馆,怂逼抽签抽中外交大使特殊职位,然后就一边看<死神>一边等石门两位室友啦.必须吐槽宾馆 ...
- 2018年北京信息科技大学第十届程序设计竞赛暨ACM选拔赛题解
链接:https://www.nowcoder.com/acm/contest/118/A 来源:牛客网 PUBG 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32768K,其他语 ...
- GDOI2017 再次酱油记
Day 0 13:00 pm 啊...今天中午一点钟从ez出发,感觉吼有趣啊.出发前先大喊一声****,在书包里放一本党史,感觉玄学可以救命[滑稽] 15:00 pm 到达东莞,坐标:石龙名冠金凯悦大 ...
- GDOI2016酱油记(补发)
这篇酱油记是前年发在MCHacker一个叫code-hub的博客上的(已崩),现在来补发一下... GDOI2016扯淡(爆零记) 大家好,我是巨弱DCDCBigBig,在五一期间和一群神牛去考GDO ...
随机推荐
- share-Nothing原理
Share nothing理论在数据库设计和优化中的实践应用 首先介绍share nothing概念.最早接触它是在 DataBaseManagentSystem一书的并行数据库章节中. 并行数据库要 ...
- hbase vs mongodb
1.HBase依赖于HDFS,HBase按照列族将数据存储在不同的hdfs文件中:MongoDB直接存储在本地磁盘中,MongoDB不分列,整个文档都存储在一个(或者说一组)文件中 (存储) 2.Mo ...
- java摘要
**idea 注册 Licensed to ilanyu License Server: http://idea.iteblog.com/key.php 1.文件上传下载 http://blog.cs ...
- WebForm 在 Global.asax 中捕获全局异常
/// <summary> /// 捕获全局异常 /// </summary> /// <param name="sender">sender& ...
- lesson 4 再谈继承多态,抽象类和接口
再谈多态,抽象类和接口 上一次博客已经概念性的概述了继承多态,抽象类和接口,这次来具体的谈一谈他们之间的联系和需要注意的地方. 一.继承和多态:Inheritance (继承) & Polym ...
- pageContext对象的用法详述
pageContext对象 这个对象代表页面上下文,该对象主要用于访问JSP之间的共享数据. pageContext是PageContext类的实例,使用pageContext可以访问page.re ...
- 【sgu390】数位dp
这题其实就是不断地合并子树,跟前面例一的思想是一样的. 这个打法我觉得非常优美啊(学别人的),为什么要搞lim1和lim2呢? 是因为在区间lim1~lim2之外的都是没有用的,但是我们f[h][su ...
- 【HDU4405】Aeroplane chess [期望DP]
Aeroplane chess Time Limit: 1 Sec Memory Limit: 32 MB[Submit][Stataus][Discuss] Description Hzz lov ...
- BestCoder Round #39 解题报告
现场只做出前三题w 不过不管怎样这既是第一次认真打BC 又是第一次体验用在线编译器调代码 订正最后一题花了今天一整个下午(呜呜 收获还是比较大的^_^ Delete wld有n个数(a1,a2,... ...
- 端到端测试,protractor测试的教程
之前我们介绍了如何测试某段js代码的逻辑是否正确,考虑的情况是否全面,但是在ui界面上我们每次做好的功能都要自己去填写内容,点击按钮等,那么是否存在自动化测试的工具呢,让这些事情可以自动完成,答案是肯 ...