题意:求$\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);
}

转载于:https://www.cnblogs.com/jefflyy/p/8688425.html

[xsy1515]小学生数学题相关推荐

  1. GDKOI 2016

    GDKOI 2016 day 1 第一题 魔卡少女 题目描述:维护一个序列,能进行以下两个操作:1.将某一个位置的值改变.2.求区间的连续子串的异或值的和. solution 因为序列的数的值都小于\ ...

  2. GDKOI 2017 滚粗记

    DAY0 今天早上的课好爽啊,两节看片课三节腐败课.在数学课上学了点新姿势然后看了一会数论,一个早上就过去了. 下午去到熟悉的酒店后开了想看很久的火影,佐助好帅啊啊啊啊啊!!!然后就被安利去玩狼人杀, ...

  3. 程序员「小镇做题」出身,月薪是父母半年收入 ……

    最近,播妞看到程序员社交群里频繁出现"小镇做题家"的字眼,大多是程序员式自嘲-- 从娱乐圈到IT圈,关于"小镇做题家"的讨论不停地掀起风浪.而其中,程序员是绕不 ...

  4. GDOI2017再次旅游滚粗记

    Preface 又是一年GDOI 今年,我只定了一个小目标,比方说进个第三天. Text 2017.4.28 Day 0 一路上非常的堵车,没敢走虎门大桥,一直绕路,开了将近四个小时才到酒店. 酒店据 ...

  5. 2018年北京信息科技大学第十届程序设计竞赛暨ACM选拔赛题解

    链接:https://www.nowcoder.com/acm/contest/118/A 来源:牛客网 PUBG 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32768K,其他语 ...

  6. CSDN第39期竞赛题解

    1.题目名称:圆小艺 最近小艺酱渐渐变成了一个圆滑的形状-球!! 小艺酱开始变得喜欢上球! 小艺酱得到n个同心圆. 小艺酱对着n个同心圆 进行染色. 相邻的圆范围内不能有相同的颜色.相隔一层的圆颜色相 ...

  7. GDKOI2016暴力记

    为什么叫暴力?因为题题都打暴力. Day0 出发前往广州,吃个饭,开个会,看电视... Day1 一切顺利,考场也没什么问题,没拖延时间. T1魔卡少女 题意:询问一个序列的所有连续子序列的异或和,可 ...

  8. {小结}GDOI2016骗分记

    可以接受吧-50+10+0+0+90+0+10+0=160 (一等奖180-) 啊!我的最小年龄奖!你怎能如此抛下我!不!!! 好了回归正题,这一次有几个地方没有发挥好,还是有点问题的. Day0: ...

  9. GDKOI 2016 总结

    前言 这是第一次去GDKOI,本着锻(bei)炼(nue)的心态出来见世面.但是自从去年参加GDOI去打酱油连奖都没拿被虐飞(悲伤的故事),我就决定要尽自己所能把比赛做好.可是紧接着的NOIP又是一个 ...

  10. “图灵杯”趣味网络邀请赛 总结

    "图灵杯"趣味网络邀请赛 总结 总结 题出的还可以. A. 相遇 题目 比赛思路 看到 直接路程除以速度和. 骗了20分. B. 回文串 题目 比赛思路 又是构造,我最怕这种题. ...

最新文章

  1. ansible批量修改linux服务器密码的playbook
  2. Windows 8测试版安装图组
  3. 此内容不能显示在一个框架中 ie_Chromium Edge中的IE兼容模式 与我们设想的有些不一样...
  4. 最全、最详细的配置jdk十步法!
  5. IntelliJ 启动不同端口的两个spring cloud项目
  6. C++ 深拷贝和浅拷贝
  7. ModuleNotFoundError: No module named ‘matplotlib‘ 解决办法
  8. R语言自然语言处理:情感分析
  9. Jmeter安装教程
  10. Jenkins教程(Linux版)
  11. IE7和IE8的CSS样式不兼容
  12. sql查询按周查询出现的跨年问题
  13. STM32 MDK片外FLASH下载算法制作 —— 基于QSPI(W25Q32)
  14. Bootstrap 导航栏
  15. python实现ks算法_Python计算KS值并绘制KS曲线
  16. Flutter——打包Windows桌面应用(流程)
  17. 在服务器上如何打开aspx文件,aspx是什么文件_aspx用什么软件打开
  18. 2.4g语音遥控器小结
  19. Matlab 2014a安装文件下载、安装教程及破解教程!!!
  20. python 代码_6行Python代码的爱心曲线

热门文章

  1. 定时器编写   例子
  2. 多选框勾选 和 后台数据处理
  3. clip_region_relclip_region
  4. java压缩包上传,解压,预览(利用editor.md和Jstree实现)和下载
  5. 用crontab命令实现每天定时的病毒扫描
  6. hadoop2.2.0 core-site.xml--global properties
  7. Excel 2007中的新文件格式
  8. CSS:标签右对齐,文本框左对齐的实现
  9. 【洛谷P1800】software_NOI导刊2010提高(06)
  10. Linux批量清空当前目录中的日志文件