#6392. 「THUPC2018」密码学第三次小作业 / Rsa (exgcd求逆元+快速幂+快速乘)
题目链接:https://loj.ac/problem/6392
题目大意:给定五个正整数c1,c2,e1,e2,N,其中e1与e2互质,且满足
c1 = m^e1 mod N
c2 = m^e2 mod N
求出正整数m
解题思路:因为e1与e2互质,所以可以找到两个整数x,y,满足e1x+e2y=1
所以m^(e1x+e2y)=m^1=m=c1^x*c2^y;
注意如果x或者y小于0时,需要求c1、c2对N的逆元
因为N的范围很大,小于2的63次方,所以不能直接乘,需要用快速乘。
求逆元的时候,无法确定N是否是素数,所以不能用费马小定理,要用扩展欧几里得
代码:
#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
#define ll long long
#define N 5000005
ll mod;
ll n,c1,c2,e1,e2;
ll read () {
char c = '\n';
while (!isdigit(c)) c = getchar();
ll res = c - '';
c = getchar();
while (isdigit(c))
{
res = res * + (c - '');
c = getchar();
}
return res;
}
void exgcd(ll a,ll b,ll &x,ll &y,ll &d){
if(!b) x=,y=,d=a;
else{
exgcd(b,a%b,y,x,d);
y-=a/b*x;
}
}
ll INV(ll a,ll p){
ll x,y,d;
exgcd(a,p,x,y,d);
return (x%p+p)%p;
}
ll qmul(ll a,ll b){
ll res=;
while(b){
if(b&) res=(res+a)%mod;
b>>=;
a=(a+a)%mod;
}
return res;
}
ll qpow(ll a,ll b){
ll res=;
while(b){
if(b&) res=qmul(res,a);
b>>=;
a=qmul(a,a);
}
return res;
}
int main(){
int T;
T=read();
while(T--){
c1=read(),c2=read(),e1=read(),e2=read(),mod=read();
ll x,y,d;
exgcd(e1,e2,x,y,d);
//如果指数为负数,需要求底数对mod的逆元
if(x<){
c1=INV(c1,mod);
x=-x;
}
if(y<){
c2=INV(c2,mod);
y=-y;
}
printf("%lld\n",qmul(qpow(c1,x),qpow(c2,y)));
}
return ;
}
#6392. 「THUPC2018」密码学第三次小作业 / Rsa (exgcd求逆元+快速幂+快速乘)的更多相关文章
- 【LibreOJ】#6392. 「THUPC2018」密码学第三次小作业 / Rsa 扩展欧几里得算法
[题目]#6392. 「THUPC2018」密码学第三次小作业 / Rsa [题意]T次询问,给定正整数c1,c2,e1,e2,N,求正整数m满足: \(c_1=m^{e_1} \ \ mod \ \ ...
- loj6392 「THUPC2018」密码学第三次小作业 / Rsa
还是挺好做的,\((e_1,e_2)=1 \Rightarrow e_1s+e_2t=0\),\(m \equiv m^1 \equiv m^{e_1s+e_2t} \equiv c_1^s c_2^ ...
- 【LibreOJ】#6396. 「THUPC2018」弗雷兹的玩具商店 / Toyshop 线段树+完全背包
[题目]#6396. 「THUPC2018」弗雷兹的玩具商店 / Toyshop [题意]给定一个长度为n的物品序列,每个物品有价值.不超过m的重量.要求支持以下三种操作:1.物品价值区间加减,2.物 ...
- 【LibreOJ】#6395. 「THUPC2018」城市地铁规划 / City 背包DP+Prufer序
[题目]#6395. 「THUPC2018」城市地铁规划 / City [题意]给定n个点要求构造一棵树,每个点的价值是一个关于点度的k次多项式,系数均为给定的\(a_0,...a_k\),求最大价值 ...
- [loj6388] 「THUPC2018」赛艇 / Citing
Description 给你一个\(~n \times m~\)的\(~01~\)矩阵,一个人在这个矩阵中走了\(~k~\)步,每一次都往四联通方向中的一个走一步.给定这个人每一步走的方向,已知这 ...
- LOJ#6387 「THUPC2018」绿绿与串串 / String (Manacher || hash+二分)
题目描述 绿绿和 Yazid 是好朋友.他们在一起做串串游戏. 我们定义翻转的操作:把一个串以最后一个字符作对称轴进行翻转复制.形式化地描述就是,如果他翻转的串为 RRR,那么他会将前 ∣R∣−1个字 ...
- 「THUPC2018」赛艇 / Citing
https://loj.ac/problem/6388 矩形匹配,小地图经过位置为1,和大地图匹配不能同时存在一个1的位置,就可以是一个当前位置 1.bitset压位,....O(n^2m^2/64) ...
- 【LOJ】#6391. 「THUPC2018」淘米神的树 / Tommy
题解 一道非常神仙的计数题 如果只有一个点,就是非常简单的树型dp \(f_{u} = (siz_{u} - 1)! \prod_{v \in son_{u}} \frac{f_{v}}{siz_{v ...
- loj6387 「THUPC2018」绿绿与串串 / String
还是很好做的,大致就是manacher,每个位置为中心的最长回文串要是能抵到最右边就合法,要是能抵到最左边,那这个点的是否合法取决于以这个点为中心的最长回文串的右端点是否合法. #include &l ...
随机推荐
- 【leetcode】394. Decode String
题目如下: 解题思路:这种题目和四则运算,去括号的题目很类似.解法也差不多. 代码如下: class Solution(object): def decodeString(self, s): &quo ...
- @ResponseBody和@RestController
Spring 关于ResponseBody注解的作用 responseBody一般是作用在方法上的,加上该注解表示该方法的返回结果直接写到Http response Body中,常用在ajax异步请求 ...
- python学习笔记(六)函数
1.函数是什么? 定义:函数是指一组语句的集合通过一个名字(函数名)封装起来,只需调用函数名即可. 2.函数的好处: 简化代码 提高代码的复用性 代码可扩展 3.python中函数的定义: 定义函数使 ...
- python 全栈开发,Day54(关于DOM操作的相关案例,JS中的面向对象,定时器,BOM,client、offset、scroll系列)
04-jQuery的属性操作 jquery的属性操作模块分为四个部分:html属性操作,dom属性操作,类样式操作和值操作 html属性操作:是对html文档中的属性进行读取,设置和移除操作.比如at ...
- Web截屏插件
官方网站:http://www.ncmem.com 官方博客:http://www.cnblogs.com/xproer 产品首页:http://www.ncmem.com/webplug/scppr ...
- elasticsearch6.8.1 x-pack插件破解
一.为什么要破解x-pack? 因为涉及到了ES服务的安全性.ES服务如果被劫持,数据直接会被删除.ES登录账号和密码的设置是通过x-pack来实现的,官方只给了免费的30天的使用权,而且 ...
- PHPExcel 之常用功能
PHPExcel基本操作: 定义EXCEL实体 即定义一个PHPEXCEL对象,并设置EXCEL对象内显示内容 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 ...
- [CSP-S模拟测试]:Reverse(模拟+暴力+剪枝)
题目描述 小$G$有一个长度为$n$的$01$串$T$,其中只有$T_S=1$,其余位置都是$0$.现在小$G$可以进行若干次以下操作: $\bullet$选择一个长度为K的连续子串($K$是给定的常 ...
- 获取系统的documents路径
获取路径 https://superuser.com/questions/1132288/windows-command-prompt-get-relocated-users-documents-fo ...
- openstack介绍及共享组件——消息队列rabbitmq
一.云计算的前世今生 所有的新事物都不是突然冒出来的,都有前世和今生.云计算也是IT技术不断发展的产物. 要理解云计算,需要对IT系统架构的发展过程有所认识. 请看下 IT系统架构的发展到目前为止大致 ...