题解

有些难度

对于 \(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\)

NOIP 模拟 $12\; \text{简单的玄学}$的更多相关文章

  1. NOIP 模拟 $12\; \text{简单的填数}$

    题解 一个纯的贪心,被我搞成 \(dp\) 了,最后把错解删掉了,骗了 \(10pts\) 考虑如何贪心,设置一种二元组 \((x,l)\),\(x\) 表示当前值,\(l\) 表示当前最长连续长度. ...

  2. NOIP 模拟 $12\; \text{简单的区间}$

    题解 签到题 求区间和为 \(k\) 的倍数的区间,我们可以转化为求左右两个端点,其前缀和相等 对于区间最大值,我们可以把其转化为一个值,它能向左,向右扩展的最远边界,一个单调栈即可 我们设一个值 \ ...

  3. noip模拟12[简单的区间·简单的玄学·简单的填数]

    noip模拟12 solutions 这次考试靠的还是比较好的,但是还是有不好的地方, 为啥嘞??因为我觉得我排列组合好像白学了诶,文化课都忘记了 正难则反!!!!!!!! 害没关系啦,一共拿到了\( ...

  4. (译文)12个简单(但强大)的JavaScript技巧(二)

    原文链接: 12 Simple (Yet Powerful) JavaScript Tips 其他链接: (译文)12个简单(但强大)的JavaScript技巧(一) 强大的立即调用函数表达式 (什么 ...

  5. (译文)12个简单(但强大)的JavaScript技巧(一)

    原文连接: 12 Simple (Yet Powerful) JavaScript Tips 我将会介绍和解析12个简单但是强大的JavaScript技巧. 这些技巧所有的JavaScript程序员都 ...

  6. 2021.5.22 noip模拟1

    这场考试考得很烂 连暴力都没打好 只拿了25分,,,,,,,,好好总结 T1序列 A. 序列 题目描述 HZ每周一都要举行升旗仪式,国旗班会站成一整列整齐的向前行进. 郭神作为摄像师想要选取其中一段照 ...

  7. NOIP模拟

    1.要选一个{1,2,...n}的子集使得假如a和b在所选集合里且(a+b)/2∈{1,2,...n}那么(a+b)/2也在所选集合里 f[i]=2*f[i-1]-f[i-2]+g[i] g[n]:选 ...

  8. ubuntu 12.04 简单配置samba服务,实现主机与虚拟机互通(设置Windows虚拟盘)

    环境: virtualbox ubuntu12.04 首先,如果你到这步了,说明你的window与linux的网络已经配好了,他们之间是可以互相Ping通的,如果没有,请看我以前的文章 由于我linu ...

  9. 7.22 NOIP模拟7

    又是炸掉的一次考试 T1.方程的解 本次考试最容易骗分的一道题,但是由于T2花的时间太多,我竟然连a+b=c都没判..暴力掉了40分. 首先a+b=c,只有一组解. 然后是a=1,b=1,答案是c-1 ...

随机推荐

  1. STM32笔记一

    1.脉冲宽度调制是(PWM):用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术,广泛应用在从测量.通信到功率控制与变换的许多领域中.一般用于直流电机调速. 2.外部中断:外部中断是单片机实 ...

  2. vue(19)嵌套路由

    嵌套路由 有时候在路由中,主要的部分是相同的,但是下面可能是不同的.比如访问首页,里面有新闻类的/home/news,还有信息类的/home/message.这时候就需要使用到嵌套路由.项目结构如下: ...

  3. postman使用笔记

    postman主要是用来做接口测试的工具,用来模拟客户端向服务器发起请求. 一.postman支持的请求类型 1.get请求 get请求是用来向服务器获取数据 get请求没有请求体,只有url和请求头 ...

  4. 【论文阅读】DSDNet Deep Structured self-Driving Network

    前言引用 [2] DSDNet Deep Structured self-Driving Network Wenyuan Zeng, Shenlong Wang, Renjie Liao, Yun C ...

  5. Jupyter使用快捷键

    命令行模式(按 Esc 生效) F: 查找并且替换 Ctrl-Shift-F: 打开命令配置 Ctrl-Shift-P: 打开命令配置 Enter: 进入编辑模式 P: 打开命令配置 Shift-En ...

  6. 手写系列-实现一个铂金段位的 React

    一.前言 本文基于 https://pomb.us/build-your-own-react/ 实现简单版 React. 本文学习思路来自 卡颂-b站-React源码,你在第几层. 模拟的版本为 Re ...

  7. canvas实现任意正多边形的移动(点、线、面)

    前言 我在上一篇文章简单实现了在canvas中移动矩形(点线面),不清楚的小伙伴请看我这篇文章:用canvas 实现矩形的移动(点.线.面)(1). ok,废话不多说,直接进入文章主题, 上一篇文章我 ...

  8. Leetcode4. 寻找两个正序数组的中位数

    > 简洁易懂讲清原理,讲不清你来打我~ 输入两个递增数组,输出中位数![在这里插入图片描述](https://img-blog.csdnimg.cn/25550994642144228e9862 ...

  9. 3java基础补充(今天和昨天学习内容整理)

    1.java单机项目 2.JavaSE又被称为J2SE,JavaEE和JavaME类同. 3.Java特性(总结) (1)跨平台/可移植性:相同的Java代码可以在任何一个支持的平台(操作系统)上运行 ...

  10. 深入学习Netty(5)——Netty是如何解决TCP粘包/拆包问题的?

    前言 学习Netty避免不了要去了解TCP粘包/拆包问题,熟悉各个编解码器是如何解决TCP粘包/拆包问题的,同时需要知道TCP粘包/拆包问题是怎么产生的. 在此博文前,可以先学习了解前几篇博文: 深入 ...