这题真挺不错的,需要一些数学知识,对细节要求高。
一些资料与参考:
除法逆元 http://blog.csdn.net/acmmaxx/article/details/18409701
逆元详解 http://blog.csdn.net/acdreamers/article/details/8220787
参考代码 http://blog.csdn.net/miracle_ma/article/details/52383461
寻找一共有多少个2的因子时用的方法不错。
不能写成pow,要写成mypow。
最后输出分子时要多次取模防止出现负数。
当a为正整数,m为素数,而且a与m互素时,a模m的逆元为a^(m-2)模m。
此题中a为2,m为一个素数。显然2与m互素。代入公式直接求逆元。
求逆元是为了使用除法逆元公式。
( a/b ) % c == ( a*b1 ) % c==((a%c)*(b1%c))%c
其中b1是b模c的逆元。

在计算过程中需要求分子分母gcd模m的逆元。
带入公式,即2^(cnt*(m-2))%m的值。
难道直接mypow(mypow(2,cnt),m-2)%m来算吗?
其实完全可以这样算,几乎不会更慢。但这个表达式是可以化简的。
根据费马小定理,2^(m-1)%m==1。
所以:2^(cnt*(m-2))%m=(2^(m-1)%m  *  2^(m-1)%m  *  ...... * 2^(m-1)%m * 2^(cnt*(m-2)%(m-1)))%m=2^(cnt*(m-2)%(m-1))%m。
乘法取模,化简,乘开来,化简,得:2^(-cnt%(m-1))%m,。
根据费马小定理,以及乘法取模上式=(2^(-cnt%(m-1))*2^(m-1))%m=2^(m-1-tmp%(m-1))。
这就是代码中aaa的由来。
#include<bits/stdc++.h>
using namespace std;typedef long long ll;
const ll mod=1000003;
ll n,k;ll mypow(ll x,ll n)
{ll ret=1;while(n){if(n&1){ret=(ret*x)%mod;}x=(x*x)%mod;n>>=1;}return ret;
}int main()
{scanf("%I64d %I64d",&n,&k);ll x=0;while((1ll<<x)<k) x++;if(x>n){puts("1 1");return 0;}ll cnt=0;for(ll i=2;i<k;i<<=1){cnt+=(k-1)/i;//这个方法好,一开始在这里超时了。我还一个个的找。}ll aaa=mypow(2,mod-1-cnt%(mod-1));//用mypow不能用pow,aaa化简了,但并没有快多少。ll fm=(mypow(mypow(2,n),k-1)*aaa)%mod;if(k-1>=mod) printf("%I64d %I64d\n",fm,fm);else{ll fz=1;ll da=mypow(2,n);for(ll i=1;i<k;i++)fz=(fz*(da-i))%mod;fz=(fz*aaa)%mod;printf("%I64d %I64d\n",((fm-fz)%mod+mod)%mod,fm);//小细节,为了防止输出负数。}return 0;
}

除法逆元(ZS and The Birthday Paradox,cf 711E)相关推荐

  1. CF369E. ZS and The Birthday Paradox

    1 /* 2 cf369E. ZS and The Birthday Paradox 3 http://codeforces.com/contest/711/problem/E 4 抽屉原理+快速幂+ ...

  2. Codeforces 711E ZS and The Birthday Paradox 数论(Legendre's定理)

    点击打开链接 题意:一年有s=2^n天,有k个人 问至少有两个人生日在同一天的概率?(答案%mod) n,k<=1e18 算对立事件 任意两人生日都不同的概率 ( (2^n-1)*(2^n-2) ...

  3. 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 ...

  4. 2017 ACM-ICPC 亚洲区(西安赛区)网络赛 B Coin(逆元,费马小定理)

    Bob has a not even coin, every time he tosses the coin, the probability that the coin's front face u ...

  5. 阿里云nginx服务器多站点的配置

    Fighting! 欲戴皇冠,必承其重! 目录视图 摘要视图 订阅 [活动]Python创意编程活动开始啦!!!    CSDN日报20170426 --<四无年轻人如何逆袭>    [C ...

  6. 【学习笔记】超简单的快速数论变换(NTT)(FFT的优化)(含全套证明)

    整理的算法模板合集: ACM模板 目录 一.前置知识 二.快速数论变换(NTT) 三.NTT证明(和FFT的关系) 四.NTT模板 数组形式的实现 vector形式的实现 点我看多项式全家桶(●^◡_ ...

  7. Matrix-tree 定理的一些整理

    \(Matrix-tree\) 定理用来解决一类生成树计数问题,以下前置知识内容均是先基于无向无权图来介绍的.有关代数余子式的部分不是很明白,如果有错误还请指出-- 部分内容参考至:\(Blog\_1 ...

  8. python3 tkinter 实现凯撒密码GUI界面

    Codes import tkinter as tk from tkinter import messageboxclass Kaisa():def __init__(self): # 构造函数sel ...

  9. A Number Theoretical Problem

    题目连接: A Number Theoretical Problem 大致题意: 给出一个整数x 和 质数p, 让你找到一个整数y满足 (x * y) % p == 1. 如果找到则输出y % p的结 ...

最新文章

  1. HDU 2159 FATE【二维完全背包】
  2. 使用asm工具让移动设备投影到pc上
  3. Android系统的开机画面显示过程分析(13)
  4. Codeforces 1276C/1277F Beautiful Rectangle (构造)
  5. Teams的MessageExtension最新功能:Initiate actions
  6. 详解3D物体检测模型: Voxel Transformer for 3D Object Detection
  7. svn:Attempted to lock an already-locked dir
  8. Android 鼠标键值列表,安卓键盘键值对照表
  9. 体检预约系统软件测试计划书,体检中心-管理软件需求分析.doc
  10. C语言程序设计笔记(浙大翁恺版) 第二周:计算
  11. Fincy APP评测:安全好用的多功能电子钱包
  12. Bootstrap导航和导航条
  13. 二叉树遍历(非递归)
  14. http状态码(204,304, 404, 504,502)
  15. 3万字智慧工业园区整体解决方案
  16. 非自锁物理按键实现自锁功能控制的方法总结
  17. 匹兹堡大学计算机科学,匹兹堡大学计算机科学硕士排名第63(2020年TFE Times排名)...
  18. 衢州计算机编程哪个学校好,柯城教育大盘点||新华小学——打开我们的时光门...
  19. [转贴]变态的C自增
  20. JVM中的垃圾回收机制

热门文章

  1. APP运行占用内存分析
  2. python制作圆形按钮_Python在pyqt5中创建一个真实的圆圈按钮
  3. 爱奇艺云剪辑Web端的技术实现
  4. GitHub 超级火:超全开源爬虫工具箱!
  5. 2018技术圈热门事件回顾,有伤痛默哀也有哭笑不得。
  6. Allegro如何设置铜箔自动避让走线
  7. 国科大学习资料--现代数字信号处理(张颢)--2019期末考试试卷
  8. c语言编程main,C语言main()函数
  9. JAVA编程入门——计算机硬件
  10. mysql更改字段名_Mysql修改字段名、修改字段类型