[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);
}
转载于:https://www.cnblogs.com/jefflyy/p/8688425.html
[xsy1515]小学生数学题相关推荐
- GDKOI 2016
GDKOI 2016 day 1 第一题 魔卡少女 题目描述:维护一个序列,能进行以下两个操作:1.将某一个位置的值改变.2.求区间的连续子串的异或值的和. solution 因为序列的数的值都小于\ ...
- GDKOI 2017 滚粗记
DAY0 今天早上的课好爽啊,两节看片课三节腐败课.在数学课上学了点新姿势然后看了一会数论,一个早上就过去了. 下午去到熟悉的酒店后开了想看很久的火影,佐助好帅啊啊啊啊啊!!!然后就被安利去玩狼人杀, ...
- 程序员「小镇做题」出身,月薪是父母半年收入 ……
最近,播妞看到程序员社交群里频繁出现"小镇做题家"的字眼,大多是程序员式自嘲-- 从娱乐圈到IT圈,关于"小镇做题家"的讨论不停地掀起风浪.而其中,程序员是绕不 ...
- GDOI2017再次旅游滚粗记
Preface 又是一年GDOI 今年,我只定了一个小目标,比方说进个第三天. Text 2017.4.28 Day 0 一路上非常的堵车,没敢走虎门大桥,一直绕路,开了将近四个小时才到酒店. 酒店据 ...
- 2018年北京信息科技大学第十届程序设计竞赛暨ACM选拔赛题解
链接:https://www.nowcoder.com/acm/contest/118/A 来源:牛客网 PUBG 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32768K,其他语 ...
- CSDN第39期竞赛题解
1.题目名称:圆小艺 最近小艺酱渐渐变成了一个圆滑的形状-球!! 小艺酱开始变得喜欢上球! 小艺酱得到n个同心圆. 小艺酱对着n个同心圆 进行染色. 相邻的圆范围内不能有相同的颜色.相隔一层的圆颜色相 ...
- GDKOI2016暴力记
为什么叫暴力?因为题题都打暴力. Day0 出发前往广州,吃个饭,开个会,看电视... Day1 一切顺利,考场也没什么问题,没拖延时间. T1魔卡少女 题意:询问一个序列的所有连续子序列的异或和,可 ...
- {小结}GDOI2016骗分记
可以接受吧-50+10+0+0+90+0+10+0=160 (一等奖180-) 啊!我的最小年龄奖!你怎能如此抛下我!不!!! 好了回归正题,这一次有几个地方没有发挥好,还是有点问题的. Day0: ...
- GDKOI 2016 总结
前言 这是第一次去GDKOI,本着锻(bei)炼(nue)的心态出来见世面.但是自从去年参加GDOI去打酱油连奖都没拿被虐飞(悲伤的故事),我就决定要尽自己所能把比赛做好.可是紧接着的NOIP又是一个 ...
- “图灵杯”趣味网络邀请赛 总结
"图灵杯"趣味网络邀请赛 总结 总结 题出的还可以. A. 相遇 题目 比赛思路 看到 直接路程除以速度和. 骗了20分. B. 回文串 题目 比赛思路 又是构造,我最怕这种题. ...
最新文章
- ansible批量修改linux服务器密码的playbook
- Windows 8测试版安装图组
- 此内容不能显示在一个框架中 ie_Chromium Edge中的IE兼容模式 与我们设想的有些不一样...
- 最全、最详细的配置jdk十步法!
- IntelliJ 启动不同端口的两个spring cloud项目
- C++ 深拷贝和浅拷贝
- ModuleNotFoundError: No module named ‘matplotlib‘ 解决办法
- R语言自然语言处理:情感分析
- Jmeter安装教程
- Jenkins教程(Linux版)
- IE7和IE8的CSS样式不兼容
- sql查询按周查询出现的跨年问题
- STM32 MDK片外FLASH下载算法制作 —— 基于QSPI(W25Q32)
- Bootstrap 导航栏
- python实现ks算法_Python计算KS值并绘制KS曲线
- Flutter——打包Windows桌面应用(流程)
- 在服务器上如何打开aspx文件,aspx是什么文件_aspx用什么软件打开
- 2.4g语音遥控器小结
- Matlab 2014a安装文件下载、安装教程及破解教程!!!
- python 代码_6行Python代码的爱心曲线
热门文章
- 定时器编写 例子
- 多选框勾选 和 后台数据处理
- clip_region_relclip_region
- java压缩包上传,解压,预览(利用editor.md和Jstree实现)和下载
- 用crontab命令实现每天定时的病毒扫描
- hadoop2.2.0 core-site.xml--global properties
- Excel 2007中的新文件格式
- CSS:标签右对齐,文本框左对齐的实现
- 【洛谷P1800】software_NOI导刊2010提高(06)
- Linux批量清空当前目录中的日志文件