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] 341. Flatten Nested List Iterator 压平嵌套链表迭代器

    Given a nested list of integers, implement an iterator to flatten it. Each element is either an inte ...

  2. Oracle-关于Oracle.ManagedDataAccess

    今天调用webservice的时候,运行程序后开始报错以下的错误信息 “/”应用程序中的服务器错误. 未能加载文件或程序集“Oracle.DataAccess”或它的某一个依赖项.试图加载格式不正确的 ...

  3. Android Tcp操作

    Tcp是基于传输层的面向连接的可靠通讯协议,其优点是基于连接,使得服务端和客户端可以实现双向通信,且实时性高,在需要服务端主动向客户端推送数据的应用场景中,使用TCP协议是一种很好的方式. 初学And ...

  4. CSP2019-终章:afo生活的开始

    出分了...退役了...449...afo了... 曾经立志不少于500的我...竟然450都没上... Orz初中的神仙学弟考了596... 接下来,是一种生活的结束,也是另一种生活的开始... 我 ...

  5. K8S+GitLab+.net core-自动化分布式部署-1

    K8S+GitLab-自动化分布式部署ASP.NET Core(一) 部署环境 一.部署流程介绍 开发人员通过Git上传asp.net core 项目到Gilab,并编写好.gitlab-ci.yml ...

  6. 在ensp上VLAN基础配置以及Access接口

    什么是VLAN? 早期的局域网技术是基于总线型的结构,也就是说所有主机共享一条传输线路.这就带来了很多问题:冲突域和安全问题.为了避免冲突域,我们使用二层交换机.但想想,一台计算机在总线上传输数据的时 ...

  7. Python基础案例1如何实现对应位置上的元素相乘/相加/相减

    如何通过a b得到c 本文以“乘”引入,其他运算,类似.案例逻辑如下: a = [[1, 2, 3], [4, 5, 6], [1, 1, 1]]b = [[1, 1, 2], [1, 3, 2], ...

  8. [高清·非影印] 深度学习入门:基于Python的理论与实现 + 源代码

    ------ 郑重声明 --------- 资源来自网络,纯粹共享交流, 如果喜欢,请您务必支持正版!! --------------------------------------------- 下 ...

  9. axios ios 微信浏览器session问题

    在ios系统下,微信浏览器使用axios 可能存在seesion不存在的问题,其原因是因为存在跨域 解决方案如下 1.修改域名为同一域名 2.后台允许跨域

  10. 查看线程CPU利用率

    查看线程CPU利用率 方法1:利用ps命令查看对应的线程 1. ps -ef | grep 进程名称 2. ps -mp 进程ID -o THREAD,pid,tid,cmd,time,%cpu,%m ...