题解

有些难度

对于 \(30pts\) 直接暴力

对于 \(70pts\) 发现规律 \(2^n-a\) 与 \(a\;\;(a\in [1,2^n))\) 分解质因数后,\(2\) 的次数相同

\(100pts\)

对于至少有两个数相同,我们可以转化为 \(1-p(\text{所有数均不相同})\),那么 \(p(\text{所有数均不相同})=\frac{A_{2^n}^m}{2^{nm}}\)

对于这个式子,我们发现,上下能约分的因子只有 \(2\),根据上文,我们可以把求 \(A_{2^n}^m\) 质因子中 \(2\) 的次数转化为求 \((m-1)!\) 中的

那么对于这个求 \((m-1)!\) 中的 \(2\) 的次数可以 \(logm\) 求,具体做法是

for (register int i(2);i<m;i<<=1) cnt2+=(m-1)/i;

证明:

当 \(i=2\) 时,我们可以把 cnt2+=(m-1)/i 看成求 \(1~m-1\) 中有多少个数质因子中至少有一个 \(2\),其他情况同理

然后再根据逆元求即可

记得开 long long

Code
#include<bits/stdc++.h>
#define ri register signed
#define p(i) ++i
using namespace std;
namespace IO{
char buf[1<<21],*p1=buf,*p2=buf;
#define gc() p1==p2&&(p2=(p1=buf)+fread(buf,1,1<<21,stdin),p1==p2)?EOF:*p1++
template<typename T>inline void read(T &x) {
ri f=1;x=0;register char ch=gc();
while(ch<'0'||ch>'9') {if (ch=='-') f=0;ch=gc();}
while(ch>='0'&&ch<='9') {x=(x<<1)+(x<<3)+(ch^48);ch=gc();}
x=f?x:-x;
}
}
using IO::read;
namespace nanfeng{
#define int long long
#define cmax(x,y) ((x)>(y)?(x):(y))
#define cmin(x,y) ((x)>(y)?(y):(x))
#define FI FILE *IN
#define FO FILE *OUT
static const int MOD=1e6+3;
int bs,n,m,cnt2,fz,fm;
inline int fpow(int a,int b) {
int res=1;
while(b) {
if (b&1) res=res*a%MOD;
a=a*a%MOD;b>>=1;
}
return res;
}
inline int main() {
// FI=freopen("nanfeng.in","r",stdin);
// FO=freopen("nanfeng.out","w",stdout);
// printf("%lld\n",fpow(2,1e6+1));
read(n),read(m);
if (log2(m)>(double)n) {puts("1,1");return 0;}
bs=fpow(2,n);
fm=fpow(bs,m-1);
if (m<=MOD) {
fz=1;
for (ri i(1);i<m;p(i)) fz=fz*(bs-i+MOD)%MOD;
}
for (register int i(2);i<m;i<<=1) cnt2+=(m-1)/i;
int inv=fpow(fpow(2,cnt2),MOD-2);
fz=fz*inv%MOD,fm=fm*inv%MOD;
printf("%lld %lld\n",(fm-fz+MOD)%MOD,fm);
return 0;
}
#undef int
}
int main() {return nanfeng::main();}

证明一下 \(2^n-a\) 与 \(a\) 分解质因数后,\(2\) 的次数相同:

\(2^n\) 的二进制可以表示为 \(10000...0\),\(1\) 后面 \(n\) 个 \(0\),那么对于 \(a\),其二进制下最低一位 \(1\) 所对应的 \(2^n\) 的那一位一定为 \(0\)

那么,\(2^n-a\) 的最低一位 \(1\) 一定与 \(a\) 的相同,而最低一位 \(1\) 代表它分解质因数后 \(2\) 的次数为几。

举例:

\(n=5,a=11\),则 \(n=100000\),\(a=1011\),\(2^5-a=10101\)

最新文章

  1. 输入/输出系统的四种不同工作方式对CPU利用率比较
  2. Watir-WebDriver关于交互式等待方法,告别一味sleep时代
  3. git log 格式化输出
  4. Linux内核阅读相关
  5. Windows Phone 简介
  6. c语言的头文件-不是c++类的头文件?
  7. BeagleBone Black项目实训手册(大学霸内部资料)
  8. Struts2 Spring hibernate 整合示例 .
  9. xdu_RainAndBow 鞍山打铁记
  10. socket用法以及tomcat静态动态页面的加载
  11. js计算日期天数差-2013-9-26
  12. XJOI网上同步训练DAY3 T2
  13. 如何在Delphi中调用VC6.0开发的COM
  14. hadoop2.6.0集群搭建
  15. ElasticSearch入门1: mac 安装
  16. 如何Python下载大文件?
  17. 全国高校绿色计算大赛 预赛第一阶段(C++)第1关:将字符串反转
  18. C#编程(五十一)----------链表
  19. ubuntu Mono+Jexus 部署到 ASP.NET MVC 5
  20. ibatis中$和#的区别

热门文章

  1. Redhat 6.9 升级SSH到OpenSSH_8.6p1完整文档
  2. 【多线程】C++ 互斥锁(mutex)的简单原理分析
  3. 微信小程序云开发-云存储的应用-识别银行卡
  4. 微信小程序云开发-云存储-上传、下载、打开文件文件(word/excel/ppt/pdf)一步到位
  5. c#链接MySql数据库方法
  6. HCNA Routing&amp;Switching之OSPF度量值和基础配置命令总结
  7. gos-log高性能大日志检索中台
  8. JavaScript之DOM、DOM树
  9. SLF4J日志桥接的应用
  10. a = input(a, yymmdd10.)引发的问题