LibreOJ2045 - 「CQOI2016」密钥破解
Description
给出三个正整数\(e,N,c(\leq2^{62})\)。已知\(N\)能表示成\(p\cdot q\)的形式,其中\(p,q\)为质数。计算\(r=(p-1)(q-1),ed\equiv 1 \pmod r\),求\(c^d \bmod N\)。
Solution
其实主要就是一件事:分解大数\(N\)。这里要用到一个叫做Pollard's Rho的算法,可以在约\(O(n^{\frac{1}{4}})\)的时间复杂度上求出一个\(n\)的因数。具体原理是生日悖论,但我不知道为什么这个是悖论...伪代码如下:
nxt(x)
return (x*x+step) mod n
PR(n)
while true
step=rand()
a=b=rand()
while true
a=nxt(a),b=nxt(nxt(b))
if(a==b) break
g=gcd(abs(a-b),n)
if(g!=1) return g
由于\(nxt(x)\)是循环的,所以用以\(a\)的两倍速度前进的\(b\)进行判断,一旦\(a=b\)则说明出现环,尝试换一个参数\(step\)去随机。
Code
//「CQOI2016」密钥破解
#include <bits/stdc++.h>
typedef long long lint;
lint n;
int pr[10]={0,2,3,5,7,11,13,17};
lint multi(lint a,lint b){lint t=a*b-(lint)((long double)a*b/n+1e-8)*n;if(t<0)return t+n;return t;}
inline lint abs(lint x) {return x<0?-x:x;}
inline lint gcd(lint x,lint y) {return y?gcd(y,x%y):x;}
int step;
inline lint nxt(lint x) {return (multi(x,x)+step)%n;}
lint PR(lint n)
{
while(true)
{
step=rand();
lint a,b; a=b=rand();
while(true)
{
a=nxt(a),b=nxt(nxt(b));
if(a==b) break;
lint g=gcd(abs(a-b),n);
if(g!=1) return g;
}
}
}
inline void exgcd(lint a,lint &x,lint b,lint &y)
{
if(b==0) {x=1,y=0; return;}
lint x1,y1; exgcd(b,x1,a%b,y1);
x=y1,y=x1-a/b*y1;
}
lint inv(lint a,lint m)
{
lint x,y; exgcd(a,x,m,y);
while(x<0) x+=m;
return x;
}
lint pow(lint x,lint y)
{
lint r=1,t=x;
for(lint i=y;i;i>>=1,t=multi(t,t)) if(i&1) r=multi(r,t);
return r;
}
int main()
{
lint e,c;
scanf("%lld%lld%lld",&e,&n,&c);
lint p=0,q=0;
for(int i=1;i<=7;i++) {if(n%pr[i]==0) p=pr[i],q=n/p; break;}
if(!p) p=PR(n),q=n/p;
lint d=inv(e,(p-1)*(q-1));
printf("%lld %lld\n",d,pow(c,d));
return 0;
}
LibreOJ2045 - 「CQOI2016」密钥破解的更多相关文章
- loj2045 「CQOI2016」密钥破解
CQOI 板子大赛之 pollard rho #include <iostream> #include <cstdio> using namespace std; typede ...
- LoibreOJ 2042. 「CQOI2016」不同的最小割 最小割树 Gomory-Hu tree
2042. 「CQOI2016」不同的最小割 内存限制:256 MiB时间限制:1000 ms标准输入输出 题目类型:传统评测方式:文本比较 上传者: 匿名 提交提交记录统计讨论测试数据 题目描述 ...
- loj #2044. 「CQOI2016」手机号码
#2044. 「CQOI2016」手机号码 内存限制:256 MiB时间限制:1000 ms标准输入输出 题目类型:传统评测方式:文本比较 上传者: 匿名 提交提交记录统计讨论测试数据 题目描述 ...
- LibreOJ2044 - 「CQOI2016」手机号码
Portal Description 给出两个十一位数\(L,R\),求\([L,R]\)内所有满足以下两个条件的数的个数. 出现至少\(3\)个相邻的相同数字: 不能同时出现\(4\)和\(8\). ...
- LibreOJ2043 - 「CQOI2016」K 远点对
Portal Description 给出平面上的\(n(n\leq10^5)\)个整点,求在欧几里得距离下第\(k\)远的点对之间的距离. Solution k-d树+堆. 用小根堆维护当前找到的第 ...
- LibreOJ2042 - 「CQOI2016」不同的最小割
Portal Description 给出一个给出一个\(n(n\leq850)\)个点\(m(m\leq8500)\)条边的无向图.定义\(cut(s,t)\)等于\(s,t\)的最小割的容量,求在 ...
- 「CQOI2016」不同的最小割
「CQOI2016」不同的最小割 传送门 建出最小割树,把每一个点对的最小割抠出来 \(\text{unique}\) 一下就好了. 参考代码: #include <algorithm> ...
- 「CQOI2016」K 远点对
/* 考虑暴力 可以n ^ 2枚举点对 然后用一个容量为2k的小根堆来维护第k大 kd-tree呢就是来将这个暴力优化, 每次先找远的并且最远距离不如堆顶的话就不继续找下去 貌似挺难构造数据卡的 */ ...
- 【LOJ】#2047. 「CQOI2016」伪光滑数
题解 可持久化可并堆 用\(f[i,j]\)表示最大的质数标号为i,然后有j个质数乘起来 用\(g[i,j]\)表示\(\sum_{k = 1}^{i}f[k,j]\) 转移是 \(f[i,j] = ...
随机推荐
- HDU 5459 Jesus Is Here (递推,组合数学)
有点麻烦的递推,递推的原则:向小的问题方向分解,注意边界. 字符串的递推式为 定义f为Si中的总方案数 首先可以得到 fi=fi-1+fi-2+组合(si-2,si-1) 然后考虑Si-2和Si-1之 ...
- Java(面试题):字符串截取
在Java中,字符串“abcd”与字符串“ab你好”的长度是一样,都是四个字符. 但对应的字节数不同,一个汉字占两个字节. 定义一个方法,按照指定的字节数来取子串. 如:对于“ab你好”,如果取三个字 ...
- MySQL对数据库数据进行复制的基本过程详解
MySQL对数据库数据进行复制的基本过程详解 这篇文章主要介绍了MySQL对数据库数据进行复制的基本过程,解读了Slave的一些相关配置,需要的朋友可以参考下 复制 复制是从一个MySQL服务器(ma ...
- iOS--UIScrollView基本用法和代理方法
主要是为了记录下UIScrollView的代理方法吧 在帮信息学院的学长做东西的时候需要大量用到分块浏览,所以就涉及到很多的关于scrollview,所以也就有了这篇文章 - (void)view ...
- C# 用qq邮箱发邮件
一.在企业的QQ邮箱中开启POP3/SMTP服务 开启服务时,授权密码保存好. 二.示例 public static string UserName = ""; // 企业邮箱 p ...
- 科技庄园(背包dp)---对于蒟蒻来说死了一大片的奇题
题目描述: Life种了一块田,里面种了一些桃树. Life对PFT说:“我给你一定的时间去摘桃,你必须在规定的时间之内回到我面前,否则你摘的桃都要归我吃!” PFT思考了一会,最终答应了! 由于PF ...
- 【思维题 单调栈】loj#2430. 「POI2014」沙拉餐厅 Salad Bar
t老师的做法好神…… 题目描述 桌面上有 n 个水果,分别是苹果和橘子.Bytea需要从水果中选择连续的一个区间,并从左到右或从右到左拿水果,且过程中橘子的数量必须始终不小于苹果的数量.求最长的区间大 ...
- 03Qt信号与槽(2)
1. 元对象工具 元对象编译器 MOC(meta object compiler)对 C++ 文件中的类声明进行分析并产生用于初始化元对象的 C++ 代码,元对象包含全部信号和槽的名字及指向这些函 ...
- 【linux】【CPU】【x86】平台说明
节选自 <鸟哥的linux私房菜> http://cn.linux.vbird.org/linux_basic/0520rpm_and_srpm_1.php 操作硬件平台:这是个很好玩的地 ...
- 第6章 AOP与全局异常处理6.5-6.11 慕课网微信小程序开发学习笔记
https://coding.imooc.com/learn/list/97.html 目录: 第6章 AOP与全局异常处理6-1 正确理解异常处理流程 13:236-2 固有的处理异常的思维模式与流 ...