2018 China Collegiate Programming Contest Final (CCPC-Final 2018)-K - Mr. Panda and Kakin-中国剩余定理+同余定理


【Problem Description】

\[求解x^{2^{30}+3}=c\pmod n
\]

其中\(n=p\cdot q\),\(p\)为小于\(x\)的最大素数,\(q\)为大于\(x\)的最小素数,\(x\)为\([10^5,10^9]\)内随机选择的数。\(0< c<n\)。

【Solution】

令\(a=2^{30}+3\),所以有\(x^a=c\pmod n\Leftrightarrow x^{a\ mod \ \varphi(n)}=c\pmod n\)。又因为\(n=p\cdot q\),所以有\(x^{a\ mod \ (p-1)\cdot (q-1)}=c\pmod n\),求出\(a\)在模\((p-1)\cdot (q-1)\)意义下的逆元\(d\),则\(x=c^d\pmod n\)。然后用中国剩余定理求解答案\(x\)即可。

至于\(p,q\),由题意可知,\(p,q\)都在\(\sqrt{n}\)附近,所以暴力求解即可。


【Code】

#include<bits/stdc++.h>
using namespace std;
#define int long long
int exgcd(int a,int b,int &x,int &y){ //扩展欧几里得
if(a==0&&b==0) return -1;
if(b==0){
x=1;y=0;
return a;
}
int gcd=exgcd(b,a%b,y,x);
y-=a/b*x;
return gcd;
}
int solve(int a,int b,int c){ //求逆元
int x,y;
int gcd=exgcd(a,b,x,y);
if(c%gcd!=0) return -1;
return (x%b+b)%b;
}
int fpow(int a,int b,int mod){ //快速幂
int ans=1;a%=mod;
while(b){
if(b&1) (ans*=a)%=mod;
(a*=a)%=mod;
b>>=1;
}
return ans;
}
int fmul(int a,int b,int mod){ //快速乘
int ans=0;a%=mod;
while(b){
if(b&1) ans=(ans+a)%mod;
a=(a+a)%mod;
b>>=1;
}
return ans;
}
int crt(int ai[], int mi[], int len) { //中国剩余定理
int ans = 0, lcm = 1;
for (int i = 0; i < len; i++) lcm *= mi[i];
for (int i = 0; i < len; i++) {
int Mi = lcm / mi[i];
int inv = fpow(Mi, mi[i] - 2, mi[i]);
int x = fmul(fmul(inv, Mi, lcm), ai[i], lcm); //若lcm大于1e9需要用快速乘fmul
ans = (ans + x) % lcm;
}
return ans;
}
int mi[5],ai[5];
signed main(){
ios::sync_with_stdio(false);
cin.tie(0);
int T,ca=0;cin>>T;
while(T--){
cout<<"Case "<<++ca<<": ";
int n,c,p,q;cin>>n>>c;
for(int i=sqrt(n);i>=0;i--) if(n%i==0){
p=i;q=n/i;
break;
}
int d=solve((1LL<<30)+3,(p-1)*(q-1),1);
if(d==-1){
cout<<"-1"<<endl;
continue;
}
ai[0]=fpow(c,d,p);ai[1]=fpow(c,d,q);
mi[0]=p;mi[1]=q;
cout<<crt(ai,mi,2)<<endl;
}
return 0;
}

2018 China Collegiate Programming Contest Final (CCPC-Final 2018)-K - Mr. Panda and Kakin-中国剩余定理+同余定理的更多相关文章

  1. 2018 China Collegiate Programming Contest Final (CCPC-Final 2018)

    Problem A. Mischievous Problem Setter 签到. #include <bits/stdc++.h> using namespace std; #defin ...

  2. 模拟赛小结:2018 China Collegiate Programming Contest Final (CCPC-Final 2018)

    比赛链接:传送门 跌跌撞撞6题摸银. 封榜后两题,把手上的题做完了还算舒服.就是罚时有点高. 开出了一道奇奇怪怪的题(K),然后ccpcf银应该比区域赛银要难吧,反正很开心qwq. Problem A ...

  3. 2018 China Collegiate Programming Contest Final (CCPC-Final 2018)(A B G I L)

    A:签到题,正常模拟即可. #include<bits/stdc++.h> using namespace std; ; struct node{ int id, time; }; nod ...

  4. 2016 China Collegiate Programming Contest Final

    2016 China Collegiate Programming Contest Final Table of Contents 2016 China Collegiate Programming ...

  5. The 2015 China Collegiate Programming Contest A. Secrete Master Plan hdu5540

    Secrete Master Plan Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 65535/65535 K (Java/Othe ...

  6. The 2015 China Collegiate Programming Contest Game Rooms

    Game Rooms Time Limit: 4000/4000MS (Java/Others)     Memory Limit: 65535/65535KB (Java/Others) Submi ...

  7. 2018 German Collegiate Programming Contest (GCPC 18)

    2018 German Collegiate Programming Contest (GCPC 18) Attack on Alpha-Zet 建树,求lca 代码: #include <al ...

  8. (寒假GYM开黑)2018 German Collegiate Programming Contest (GCPC 18)

    layout: post title: 2018 German Collegiate Programming Contest (GCPC 18) author: "luowentaoaa&q ...

  9. 2017 China Collegiate Programming Contest Final (CCPC 2017)

    题解右转队伍wiki https://acm.ecnu.edu.cn/wiki/index.php?title=2017_China_Collegiate_Programming_Contest_Fi ...

随机推荐

  1. [LeetCode] 93. Restore IP Addresses 复原IP地址

    Given a string containing only digits, restore it by returning all possible valid IP address combina ...

  2. [LeetCode] 295. Find Median from Data Stream 找出数据流的中位数

    Median is the middle value in an ordered integer list. If the size of the list is even, there is no ...

  3. ue4 优化建议与经验

    转自:https://dawnarc.com/2016/12/ue4%E4%BC%98%E5%8C%96%E5%BB%BA%E8%AE%AE%E4%B8%8E%E7%BB%8F%E9%AA%8C/ 内 ...

  4. Spring boot后台搭建二集成Shiro实现用户验证

    上一篇文章中介绍了Shiro 查看 将Shiro集成到spring boot的步骤: (1)定义一个ShiroConfig,配置SecurityManager Bean,SecurityManager ...

  5. python测试工具nosetests

    今天在github上找东西,找到个工具是python写的,但是需要安装nosetests,因此了解了下nosetests python除了unittest,还有nosetests,使用更快捷 nose ...

  6. 【OpenCV开发】OpenCV3后IPLimage转换成MAT的问题

    IplImage* img1 = cvCreateImage(cvGetSize(resizeRes), IPL_DEPTH_8U, 1);//创建目标图像 Mat test = img1;  报错 ...

  7. Gevent模块,协程应用

    Gevent官网文档地址:http://www.gevent.org/contents.html 进程.线程.协程区分 我们通常所说的协程Coroutine其实是corporate routine的缩 ...

  8. 获取apk的Activity和Package

    2.查看包名和activity adb logcat|grep -i activitymanager 获取当前界面的activity 1.adb shell dumpsys window window ...

  9. Module 'mysql' already loaded in Unknown on line 0解决方法

    Module 'mysql' already loaded in Unknown on line 0解决方法 直接进入php.ini 把;extension=mysql.so注释掉就好了

  10. 启动3ds Max报 d3dx9_43.dll丢失 解决方法

    d3dx9_43.dll文件与Microsoft DirectX关联.负责启动基于Windows的游戏和高级图形程序. 在360安全卫士上搜索了 DirectX 下载了这个修复工具 运行应用 点击修复 ...