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

【Problem Description】
\]
其中\(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-中国剩余定理+同余定理的更多相关文章
- 2018 China Collegiate Programming Contest Final (CCPC-Final 2018)
Problem A. Mischievous Problem Setter 签到. #include <bits/stdc++.h> using namespace std; #defin ...
- 模拟赛小结:2018 China Collegiate Programming Contest Final (CCPC-Final 2018)
比赛链接:传送门 跌跌撞撞6题摸银. 封榜后两题,把手上的题做完了还算舒服.就是罚时有点高. 开出了一道奇奇怪怪的题(K),然后ccpcf银应该比区域赛银要难吧,反正很开心qwq. Problem A ...
- 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 ...
- 2016 China Collegiate Programming Contest Final
2016 China Collegiate Programming Contest Final Table of Contents 2016 China Collegiate Programming ...
- 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 ...
- The 2015 China Collegiate Programming Contest Game Rooms
Game Rooms Time Limit: 4000/4000MS (Java/Others) Memory Limit: 65535/65535KB (Java/Others) Submi ...
- 2018 German Collegiate Programming Contest (GCPC 18)
2018 German Collegiate Programming Contest (GCPC 18) Attack on Alpha-Zet 建树,求lca 代码: #include <al ...
- (寒假GYM开黑)2018 German Collegiate Programming Contest (GCPC 18)
layout: post title: 2018 German Collegiate Programming Contest (GCPC 18) author: "luowentaoaa&q ...
- 2017 China Collegiate Programming Contest Final (CCPC 2017)
题解右转队伍wiki https://acm.ecnu.edu.cn/wiki/index.php?title=2017_China_Collegiate_Programming_Contest_Fi ...
随机推荐
- [LeetCode] 298. Binary Tree Longest Consecutive Sequence 二叉树最长连续序列
Given a binary tree, find the length of the longest consecutive sequence path. The path refers to an ...
- [LeetCode] 516. Longest Palindromic Subsequence 最长回文子序列
Given a string s, find the longest palindromic subsequence's length in s. You may assume that the ma ...
- ssh登录服务器提示错误no hostkey alg
ssh登录服务器提示错误no hostkey alg ssh root@192.168.1.100 -vvv 提示失败: no hostkey alg 登录到192.168.1.100服务器 rm - ...
- node版本切换工具n的使用介绍
全局安装 npm install -g n mac的安装目录/usr/local/n/versions/node/13.2.0 因此首先在/usr/local/创建目录n,修改权限为普通访问权限,这样 ...
- redis(1)---linux下的安装
安装redis 照着官网一波操作即可:https://redis.io/download,如果不能正常编译能是少了gcc,如果能联网直接 yum install gcc再编译. 照着官网操作走一波 1 ...
- H5混合开发中android终端和ios终端常见的兼容问题2
转自 https://www.cnblogs.com/stoneniqiu/p/6077112.html 1.ios键盘挡住输入框. setInterval(function () { if (doc ...
- 关于最火爆的服务器Tomcat你真的了解吗?
作为Apache 软件基金会的Jakarta 项目中的一个核心项目,Tomcat因技术先进.性能稳定,而且免费,因而深受Java 爱好者的喜爱并得到了部分软件开发商的认可,成为目前比较流行的Web 应 ...
- hashMap的源码实现
1.初步认识hashMap public static void main(String[] args) { HashMap<String, Integer> map = new Hash ...
- LeetCode 704. 二分查找(Binary Search)
704. 二分查找 704. Binary Search 题目描述 给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target,写一个函数搜索 nums 中的 target,如果 ...
- Linux学习-文件基础权限
文件基本权限 drwxr-xr-x 第一个字符表示文件类型 d:表示是一个目录.-:表示这是一个普通的文件.l: 表示这是一个符号链接文件,实际上它指向另一个文件.b.c:分别表示区块设备和其他的外围 ...