Mr. Panda and Kakin

给定n,cn, cn,c,要我们找到nnn是两个相邻质数的乘积,要我们找到xxx,满足x230+3≡c(modn)x ^{2 ^{30} + 3} \equiv c \pmod nx230+3≡c(modn),1010≤n≤1018,0<c<n10 ^{10} \leq n \leq 10 ^ {18}, 0 < c < n1010≤n≤1018,0<c<n,

考虑得到230+32 ^{30} + 3230+3模ϕ(n)\phi(n)ϕ(n)下的逆元,为inv=(230+3)ϕ(n)−1inv = (2 ^{30} + 3) ^{\phi(n) - 1}inv=(230+3)ϕ(n)−1,则有cinv≡x(230+3)inv≡x(modn)c ^{inv} \equiv x ^{(2^{30} + 3)inv} \equiv x \pmod{n}cinv≡x(230+3)inv≡x(modn),使用O(1)O(1)O(1)快速乘即可。

#include <bits/stdc++.h>using namespace std;long long n, c, phi, inv;inline long long mul(long long x, long long y, long long mod) {return (x * y - (long long)((long double)x / mod * y) * mod + mod) % mod;
}long long exgcd(long long a, long long b, long long & x, long long & y) {if(!b) {x = 1, y = 0;sreturn a;}long long gcd = exgcd(b, a % b, x, y);long long temp = x;x = y;y = temp - a / b * y;return gcd;
}long long quick_pow(long long a, long long n, long long mod) {long long ans = 1;while (n) {if (n & 1) {ans = mul(ans, a, mod);}a = mul(a, a, mod);n >>= 1;}return ans;
}int main() {// freopen("in.txt", "r", stdin);// freopen("out.txt", "w", stdout);int T, cas = 0;scanf("%d", &T);while (T--) {scanf("%lld %lld", &n, &c);long long p = sqrt(n), q;while (true) {if (n % p == 0) {break;}p--;}q = n / p;phi = (p - 1) * (q - 1);exgcd((1ll << 30) + 3, phi, inv, p);inv = ((inv % phi) + phi) % phi;printf("Case %d: %lld\n", ++cas, quick_pow(c, inv, n));}return 0;
}

Mr. Panda and Kakin(拓展欧几里得 + O(1)快速乘)相关推荐

  1. poj1061-青蛙的约会(拓展欧几里得java)

    题目: 两只青蛙在网上相识了,它们聊得很开心,于是觉得很有必要见一面.它们很高兴地发现它们住在同一条纬度线上,于是它们约定各自朝西跳,直到碰面为止.可是它们出发之前忘记了一件很重要的事情,既没有问清楚 ...

  2. 拓展欧几里得模板/求逆元模板(java)

    拓展欧几里得模板 参考:哈尔滨理工大学ACM培训资料汇编/ACM-ICPC培训资料汇编* 基本原理 :设 a 和 b 不全为 0,则存在整数 x,y 使得 xa yb=gcd(a,b)=c 对于辗转相 ...

  3. 杭电2669拓展欧几里得

    杭电2669 给a,b求Xa Yb = 1.如果没有则输出sorry. 可以通过拓展欧几里得指导Xa Yb = gcd(a,b). 不言而喻要判断gcd(a,b)是否等于1.如果不等于1,那么就是so ...

  4. A/B HDU - 1576 (逆元或拓展欧几里得或数学公式)多解法求大数结果

    题意:求(A/B)%9973,但由于A很大,我们只给出n(n=A%9973)(我们给定的A必能被B整除,且gcd(B,9973) = 1). 思维:(1)逆元+扩展欧几里得算法:满足a*k≡1 (mo ...

  5. 拓展欧几里得小结(初级理解)

    什么是拓展欧几里得?简单的说,就是求关于x,y的方程 ax + by = gcd(a,b) 的所有整数解 现在我们令g = gcd(a,b)则方程变成了ax + by = g 假如我们现在知道了关于这 ...

  6. 拓展欧几里得 [Noi2002]Savage

    对于一个野人,他(她?)所在的位置,(C[i]+x*p[i])%ans,是的,暴力枚举每一个ans,用拓展欧几里得求出每两个wildpeople(wildrage?)相遇的年份,如果小于最小的寿限(就 ...

  7. AcWing 878. 线性同余方程(拓展欧几里得)

    题目链接 https://www.acwing.com/problem/content/880/ 思路 ai×xi≡bi(modmi)a_i\times x_i≡b_i(mod \ m_i)ai​×x ...

  8. 数学--数论--欧几里得定理和拓展欧几里得定理

    欧几里得定理: gcd(a, b) = gcd(b, a%b) 证明: 我们首先约定:m = gcd(a,b) , n = gcd(b, q) , a = b*p +q.(这里的gcd含义跟上面一样, ...

  9. POJ1061青蛙的约会(拓展欧几里得)

    青蛙的约会 Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 146847 Accepted: 34169 Description ...

最新文章

  1. pstree进程管理
  2. GeoTrust 企业(OV)型 SSL证书
  3. FastDFS安装、配置、部署(一)
  4. DataGridView的DataGridViewComboBoxColumn列点击一次
  5. Java多线程复习_Java多线程复习
  6. python ctp接口_使用ctp的python接口
  7. postgresql对于HashJoin算法的Data skew优化与MCV处理
  8. 电脑手机wifi互传文件_安卓手机文件互传
  9. [文摘20110527] 小故事 : 大有 和 天成 都是一辈子
  10. 代理(Proxy)和背靠背用户代理(B2BUA)
  11. f018计算机辅助设计是什么,F018,丝印Marking-电子元件丝印查询
  12. png图片格式转换器_如何将图像转换为PNG格式
  13. 读文献——《Deep Residual Learning for Image Recognition》
  14. css3八卦,CSS3 阴阳八卦(太极)图动画
  15. [算法] 剑指offer2 golang 面试题2:二进制加法
  16. Java攻略之API
  17. linux文件目录挂载点,挂载点 文件通配符 目录的一些理解
  18. Hive元数据信息获取
  19. 好系统教你如何更改Windows 10中的用户帐户控制(UAC)设置
  20. 美法官:甲骨文与谷歌专利诉讼无法和解

热门文章

  1. python数据分析软件_Python数据分析工具
  2. 表白和被表白时遇到的骚操作,最后一个天秀!| 今日最佳
  3. 入门Python,限时1元!
  4. AI催生新的工作机遇:5个未来会很吃香的岗位
  5. html试题及答案,HTML试题及答案
  6. mysql快照过久_Oracle 快照(snapshot) 管理
  7. eomj表情 mysql_mysql存储4字节的表情包数据报异常_Emoji表情包_Incorrect string value: #3...
  8. 六元均匀直线阵的各元间距为_实验二 均匀直线阵
  9. mac mysql 移动硬盘_MAC一些高能过程记录(一些没必要的坑)
  10. c++ 读文件_第十六节:读文件,文件的创建,写文件,文件的读写以及鼠标键盘事件和图形绘制...