51Nod1778 小Q的集合 【组合数】【Lucas定理】
题目分析:
题解好高深......
我给一个辣鸡做法算了,题解真的看不懂。
注意到方差恒为$0$,那么其实就是要我们求$\sum_{i=0}^{n}\binom{n}{i}(i^k-(n-i)^k)^2$。
转换一下
$\sum_{i=0}^{n}\binom{n}{i}(i^k-(n-i)^k)^2$
$=2\sum_{i=0}^{n}\binom{n}{i}(i^{2k}-i^k(n-i)^k)$
注意到$i^{2k}$与$i^k(n-i)^k$在模$m$意义下都是一个周期为$m$的数列,那么我们需要求出每隔$m$个的组合数的和,即:
$2\sum_{i=0}^{m-1}(\sum_{j=0}^{\frac{n-i}{m}}\binom{n}{i+j*m}(i^{2k}-i^k(n-i)^k))$
把焦点放到内部的求和里面去,它是很简单的一个式子,试着转化它。首先我们可以根据Lucas定理分析出,对于外部的$i$,它的结果中一定有$ \binom{n\%m}{i} $。
剩下的是什么?首先有不等式$i+j*m \leq n\%m + \left \lfloor \frac{n}{m} \right \rfloor*m$。在这里我们毫无疑问地认为$i \leq n\%m$。否则对结果无影响。
我们接受$\left \lfloor \frac{n}{m} \right \rfloor$的所有影响,取满它,取满一排,它是$2$的次幂。
所以这个式子就等于$2\sum_{i=0}^{m-1}(\binom{n\%m}{i}*2^{\left \lfloor \frac{n}{m} \right \rfloor}(i^{2k}-i^k(n-i)^k))$
$\left \lfloor \frac{n}{m} \right \rfloor$很大,采用费马定理优化。
这样我们就可以解决它在$O(mlogk)$的时间内了。
注意,如果我们会线性求逆元以及线性筛,可以去掉log。
代码:
#include<bits/stdc++.h>
using namespace std; const int maxn = ; int mod,nr,k,np;
char str[maxn];
int str2[maxn]; int c[maxn],rw[maxn]; void read(){
scanf("%s",str);
scanf("%d%d",&k,&mod);
int len = strlen(str);
for(register int i=;i<len;i++){ nr = nr*+str[i]-''; nr %= mod; }
for(register int i=,num=;i<len;i++){
np = np*+str[i]-''; str2[i] = np/mod; np %= mod;
} np = ;
for(register int i=;i<len;i++){
np = np*+str2[i]; np %= (mod-);
}
} int fast_pow(int now,int pw){
int ans = ,dd = now,base = ;
while(base <= pw){
if(base & pw){ans = (1ll*ans*dd)%mod;}
dd = (1ll*dd*dd)%mod;
base<<=;
}
return ans;
} int prime[maxn/],flag[maxn],num;
void get_prime(int N){
rw[] = ; flag[] = ;
for(int i=;i<=N;i++){
if(!flag[i]){prime[++num]=i;rw[i]=fast_pow(i,k);}
for(int j=;j<=num&&i*prime[j]<=N;j++){
flag[i*prime[j]] = ;
rw[i*prime[j]] = (1ll*rw[i]*rw[prime[j]])%mod;
if(i%prime[j] == ) break;
}
}
} void init(){
get_prime(nr);
np = fast_pow(,np+); c[] = ;
for(register int i=;i<=nr;i++){
c[i] = (1ll*c[i-]*(nr-i+))%mod;
c[i] = (1ll*c[i]*fast_pow(i,mod-))%mod;
}
} void work(){
int ans = ;
for(register int i=;i<mod;i++){
if(i > nr) break;
int hh = rw[i];
int pp = ((1ll*hh*hh)%mod) - (1ll*hh*rw[nr-i])%mod;
if(pp < ) pp += mod;
pp = (1ll*pp*c[i])%mod;
ans += pp; if(ans >= mod) ans -= mod;
}
ans += mod; if(ans >= mod) ans -=mod;
ans = (1ll*np*ans)%mod;
printf("%d",ans);
} int main(){
read();
init();
work();
return ;
}
51Nod1778 小Q的集合 【组合数】【Lucas定理】的更多相关文章
- uoj86 mx的组合数 (lucas定理+数位dp+原根与指标+NTT)
uoj86 mx的组合数 (lucas定理+数位dp+原根与指标+NTT) uoj 题目描述自己看去吧( 题解时间 首先看到 $ p $ 这么小还是质数,第一时间想到 $ lucas $ 定理. 注意 ...
- [Swust OJ 247]--皇帝的新衣(组合数+Lucas定理)
题目链接:http://acm.swust.edu.cn/problem/0247/ Time limit(ms): 1000 Memory limit(kb): 65535 Descriptio ...
- luogu4345 [SHOI2015]超能粒子炮·改(组合数/Lucas定理)
link 输入\(n,k\),求\(\sum_{i=0}^k{n\choose i}\)对2333取模,10万组询问,n,k<=1e18 注意到一个2333这个数字很小并且还是质数这一良好性质, ...
- 【(好题)组合数+Lucas定理+公式递推(lowbit+滚动数组)+打表找规律】2017多校训练七 HDU 6129 Just do it
http://acm.hdu.edu.cn/showproblem.php?pid=6129 [题意] 对于一个长度为n的序列a,我们可以计算b[i]=a1^a2^......^ai,这样得到序列b ...
- 【BZOJ-4591】超能粒子炮·改 数论 + 组合数 + Lucas定理
4591: [Shoi2015]超能粒子炮·改 Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 95 Solved: 33[Submit][Statu ...
- 组合数(Lucas定理) + 快速幂 --- HDU 5226 Tom and matrix
Tom and matrix Problem's Link: http://acm.hdu.edu.cn/showproblem.php?pid=5226 Mean: 题意很简单,略. analy ...
- 【组合数+Lucas定理模板】HDU 3037 Saving
acm.hdu.edu.cn/showproblem.php?pid=3037 [题意] m个松果,n棵树 求把最多m个松果分配到最多n棵树的方案数 方案数有可能很大,模素数p 1 <= n, ...
- CodeForces-451E:Devu and Flowers (母函数+组合数+Lucas定理)
Devu wants to decorate his garden with flowers. He has purchased n boxes, where the i-th box contain ...
- HDU3037Saving Beans(组合数+lucas定理)
Problem Description Although winter is far away, squirrels have to work day and night to save beans. ...
随机推荐
- dcoker搭建wordpress
下载wordpress镜像 docker pull wordpress 创建wordpress容器 docker run -d --name wordpress --link mysql:mysql ...
- NET操作RabbitMQ组件EasyNetQ
NET操作RabbitMQ组件EasyNetQ使用中文简版文档. 本文出自EasyNetQ官方文档,内容为自己理解加翻译.文档地址:https://github.com/EasyNetQ/EasyNe ...
- Linux reboot与init 6区别
Reboot与init 6的区别 - flyingcloud_2008的专栏 - CSDN博客https://blog.csdn.net/flyingcloud_2008/article/detail ...
- WIN下修改host文件并立即生效
怎样修改WIN7下的host文件_百度经验https://jingyan.baidu.com/article/9faa72317903f1473c28cb01.html hosts立即生效的方法 - ...
- Jenkins Installing and migration
JAVA_Zookeeper_hadoop - CSDN博客https://blog.csdn.net/wangmuming Installing Jenkins on Red Hat distrib ...
- webdriver原理、协议
1.webdriver client的原理是什么? 当测试脚本启动firefox的时候,selenium-webdriver 会首先在新线程中启动firefox浏览器.如果测试脚本指定了firefox ...
- fork分支与源分支同步代码
最进软件工程课程要团队开发做个网站项目,于是我在团队里推了使用github这种网站来协同开发,但是出现了个问题:fork后的代码无法 与源分支代码同步,导致fork分支的代码只有自己写的那部分,而不是 ...
- 1 Expression of Possiblity
Expression of possibility Probably Perhaps There's a change(that) It's very likly(that) It's pos ...
- 安装sqlprompt
特别说明:注册机会报毒,安装前请先关闭杀毒软件!下载好附件之后解压,打开SQLPrompt_7.2.0.241.exe按照提示安装完成.安装完成后断网!打开数据库,会在菜单栏中看到SQL Prompt ...
- python爬虫之redis环境简单部署
Redis 简介 Redis 是完全开源免费的,遵守BSD协议,是一个高性能的key-value数据库. Redis 与其他 key - value 缓存产品有以下三个特点: Redis支持数据的持久 ...