Codeforces 711E ZS and The Birthday Paradox 数论(Legendre's定理)
点击打开链接
题意:一年有s=2^n天,有k个人 问至少有两个人生日在同一天的概率?(答案%mod)
n,k<=1e18
算对立事件 任意两人生日都不同的概率 ( (2^n-1)*(2^n-2)*...*(2^n-(k-1)) ) /(2^(n*(k-1))
n,k<=1e18都非常大,尝试将分子分母同时约去gcd(A,B),分母是2的幂次 则gcd也肯定为2^i,找到最大i
分子可以展开成A=f(p)*2^n+(k-1)! f(p)为某个多项式
则gcd2^i满足2^i|2^n && 2^i|(k-1)! 根据Legendre's定理(其实就是算因子2在k!中出现多少次) 求出d=2^i
对于分母 可以直接消掉d 对于分子(2^n-1)*(2^n-2)*...*(2^n-(k-1))
若k>mod 则分子显然为0(因为分子为mod个连续的数相乘,至少有一个数为mod的倍数)
若k<mod mod=1e6+3 暴力算出分子后乘上逆元即可.总的复杂度为O(mod+log(k)+log(n))
#include <bits/stdc++.h>
using namespace std;
typedef unsigned long long ll;
const int N=2e5+20;
const ll mod=1e6+3;
ll n,k;
ll powmod(ll x,ll n)
{ll s=1;while(n){if(n&1)s=(s*x)%mod;x=(x*x)%mod;n>>=1;}return s;
}
ll inverse(ll x)
{ return powmod(x,mod-2);
}
int main()
{while(cin>>n>>k){ll pw=0,d;if(n<=63 && k>(1ll<<n)){puts("1 1");continue;}ll A=1,B;//if(k-1>=mod)// A=0;ll x=2;//ÕÒµ½·Ö×ӺͷÖĸµÄgcdwhile(x<=k-1)pw+=(k-1)/x,x=x*2ll;d=powmod(2ll,pw);ll res=1,y=powmod(2,n);for(ll i=1;i<=k-1;i++){res=(res*(y-i+mod)%mod)%mod;if(res==0)//×î¶à×ömod-1´Î break;}res=(res*inverse(d))%mod;A=res;B=powmod(2ll,n)%mod;B=powmod(B,k-1)%mod;B=(B*inverse(d))%mod;A=(B-A+mod)%mod;cout<<A<<' '<<B<<endl;}return 0;
}
Codeforces 711E ZS and The Birthday Paradox 数论(Legendre's定理)相关推荐
- cf/codeforces#369-E - ZS and The Birthday Paradox- 数学+gcd+逆元+勒让德定理
引理: 勒让德定理 :http://baike.baidu.com/link?url=mqSXfFsk18D6zM7C1IVMh11M-3PaDRwCzqnB2ThJFymE98UuTGjmStD_u ...
- CF369E. ZS and The Birthday Paradox
1 /* 2 cf369E. ZS and The Birthday Paradox 3 http://codeforces.com/contest/711/problem/E 4 抽屉原理+快速幂+ ...
- 除法逆元(ZS and The Birthday Paradox,cf 711E)
这题真挺不错的,需要一些数学知识,对细节要求高. 一些资料与参考: 除法逆元 http://blog.csdn.net/acmmaxx/article/details/18409701 逆元详解 ht ...
- CodeForces - 1497E2 Square-free division (hard version)(dp+数论)
题目链接:点击查看 题目大意:给出一个长度为 nnn 的数列,现在最多可以修改 kkk 个数字为任意数值,现在问最少可以将数列划分成多少个连续的数列,使得每一个单独的段中,任意两个数的乘积都不能是完全 ...
- Codeforces 1499D - The Number of Pairs(数论 + 组合计数)
昨晚的cf没打,然后有人QQ问我D来着,正好在上毛概课可以划水就来口胡一波题解( 较为简单的套路题 ? (逃 简单实现一下就行了 ~ #include <bits/stdc++.h>usi ...
- codeforces:C. Even Subarrays【纯数论 + 异或套路 + 数组代替dict优化】
目录 题目截图 题目分析 ac code 总结 题目截图 题目分析 需要找子数组的异或和是否有奇数个因数 有奇数个因数的都是完全平方数 可以枚举所有可能的完全平方数 用前缀异或和记录,那么[i-j]的 ...
- codeforces:D. Range = √Sum【构造 + 数论分析】
目录 题目截图 题目分析 ac code 总结 题目截图 题目分析 # 假设a1-an从小到大 # 考虑固定a1和an,不妨令a1 = p,an = q # 我们希望答案是对称的,(p + q) / ...
- cf711E. ZS and The Birthday Paradox
链接 点击跳转 题解 a n s = 1 − 2 n ( 2 n − 1 ) ( 2 n − 2 ) - ( 2 n − ( k − 1 ) ) 2 n k ans = 1 - \frac{2^n(2 ...
- 数论一之定理证明——裴蜀/威尔逊/费马/扩展欧几里得/[扩展]欧拉/[扩展]中国剩余定理,欧拉函数,逆元,剩余系,筛法
打死没想到会在H老师处学懂数论 同余,整除 模运算 埃式筛法 欧拉筛法 最大公约数和最小公倍数 辗转相除法 更相减损术 裴蜀定理 威尔逊定理 费马定理 同余等价类.剩余系.缩系 欧拉函数 欧拉定理 扩 ...
最新文章
- 使用 go 实现 Proof of Stake 共识机制
- 从一点儿不会开始——Unity3D游戏开发学习(一)
- Django入门-项目创建与初识子应用
- matplotlib - ax.bar()ax.pie()
- firefox与ie 的javascript区别
- C++设计模式-工厂模式
- 基于业务和平台理解数字营销概念
- 4.6.3 内表数据处理
- mysql setnull_1、Mysql无法创建外键的原因 2、MySql 外键约束 之CASCADE、SET NULL、RESTRICT、NO ACTION分析和作用...
- Swoole HTTP 的应用
- gitserver提交代码的总结
- 【11】MINST数据集的分类与效果验证
- 获取元素属性(offsetHeight、clientHeight...)无效
- P6615 Kruskal + 构造
- LeetCode 781 森林中的兔子 题解
- 给自己定个小目标:利用python进行数据分析
- matlab 双边滤波(彩色图)
- 封装R0805跟R0603贴片电阻有什么区别?
- 一个大专生从8K到13K的挫折经历
- 从输入 URL 到页面加载完成的过程中都发生了什么事情?