NOIP 模拟 $12\; \text{简单的玄学}$
题解
有些难度
对于 \(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{简单的玄学}$的更多相关文章
- NOIP 模拟 $12\; \text{简单的填数}$
题解 一个纯的贪心,被我搞成 \(dp\) 了,最后把错解删掉了,骗了 \(10pts\) 考虑如何贪心,设置一种二元组 \((x,l)\),\(x\) 表示当前值,\(l\) 表示当前最长连续长度. ...
- NOIP 模拟 $12\; \text{简单的区间}$
题解 签到题 求区间和为 \(k\) 的倍数的区间,我们可以转化为求左右两个端点,其前缀和相等 对于区间最大值,我们可以把其转化为一个值,它能向左,向右扩展的最远边界,一个单调栈即可 我们设一个值 \ ...
- noip模拟12[简单的区间·简单的玄学·简单的填数]
noip模拟12 solutions 这次考试靠的还是比较好的,但是还是有不好的地方, 为啥嘞??因为我觉得我排列组合好像白学了诶,文化课都忘记了 正难则反!!!!!!!! 害没关系啦,一共拿到了\( ...
- (译文)12个简单(但强大)的JavaScript技巧(二)
原文链接: 12 Simple (Yet Powerful) JavaScript Tips 其他链接: (译文)12个简单(但强大)的JavaScript技巧(一) 强大的立即调用函数表达式 (什么 ...
- (译文)12个简单(但强大)的JavaScript技巧(一)
原文连接: 12 Simple (Yet Powerful) JavaScript Tips 我将会介绍和解析12个简单但是强大的JavaScript技巧. 这些技巧所有的JavaScript程序员都 ...
- 2021.5.22 noip模拟1
这场考试考得很烂 连暴力都没打好 只拿了25分,,,,,,,,好好总结 T1序列 A. 序列 题目描述 HZ每周一都要举行升旗仪式,国旗班会站成一整列整齐的向前行进. 郭神作为摄像师想要选取其中一段照 ...
- 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]:选 ...
- ubuntu 12.04 简单配置samba服务,实现主机与虚拟机互通(设置Windows虚拟盘)
环境: virtualbox ubuntu12.04 首先,如果你到这步了,说明你的window与linux的网络已经配好了,他们之间是可以互相Ping通的,如果没有,请看我以前的文章 由于我linu ...
- 7.22 NOIP模拟7
又是炸掉的一次考试 T1.方程的解 本次考试最容易骗分的一道题,但是由于T2花的时间太多,我竟然连a+b=c都没判..暴力掉了40分. 首先a+b=c,只有一组解. 然后是a=1,b=1,答案是c-1 ...
随机推荐
- MRCTF (re和crypto)wp
RE: 一.PixelShooter(这题比赛我居然没看,靠,血亏,所以做不出来就不要一直死怼,这题挺好写的,) unity一般是用c#写的,刚好又是apk,可以用dnspy来反编译看看,在源码中找到 ...
- ESP32低功耗模式
1.ESP32 系列芯片提供三种可配置的睡眠模式,针对这些睡眠模式,我们提供了了多种低功耗解决方案,用户可以结合具体需求选择睡眠模式并进行配置.三种睡眠模式如下: Modem-sleep 模式:CPU ...
- k8s之deployment详解
Deployment介绍 为了更好地解决服务编排的问题,k8s在V1.2版本开始,引入了deployment控制器,值得一提的是,这种控制器并不直接管理pod, 而是通过管理replicaset来间接 ...
- python pip install matplotlib安装模块
python pip install matplotlib安装模块,可附带安装相关的模块 程序运行提示: from . import _imaging as coreImportError: DLL ...
- Java 8 Function 函数接口
这篇文章属于 Java 8 教程(LTS)系列教程 在 Java 8 中,Function 接口是一个函数接口,它位于包 java.util.function 下. Function 接口中定义了一个 ...
- 家庭账本开发day02
今日完成 今天主要进行了前台界面的构架,利用layUI已有的模板编写新增账单界面 然后进行了后端的Bean和Servlet的初步编写,实现数据库的构建. 遇到问题 获取前端传输数据,并添加数据到数据库 ...
- 结对开发_石家庄地铁查询web系统
结对开发:队友田昕可 大二上学期做过只有两号线的地铁查询系统,但是只能在控制台操作.这一次将线路加到了六条,并且要求web实现,下面简述一下设计思路和具体代码实现: 1.数据库建表 于我们自己习惯而言 ...
- Python中字典get方法的使用技巧
get方法,用于获取字典中某个键值key 对应value的值,此方法可以接收两个参数,第一个参数传入key的值,第二个参数用于传入一个自定义返回值,如果查询的key在字典中存在,就会反回对应key在字 ...
- odoo12里面的RPC【远程过程调用】
odoo的RPC有两种:RPC API:1.xml-rpc 2.json-rpc 案例 x ...
- Python -- raw_input函数
使用raw_input函数,它会把所有的输入当作原始数据(raw data),然后将其放入字符串中: >>> input("Enter a number: ") ...