BZOJ 4522: [Cqoi2016]密钥破解】的更多相关文章

http://www.lydsy.com/JudgeOnline/problem.php?id=4522 题目:给你RSA密钥的公钥和密文,求私钥和原文,其中\(N=pq\le 2^{62}\),p和q为质数. RSA加密算法:https://en.wikipedia.org/wiki/RSA_(cryptosystem) N的范围较小,我们可以用pollard-rho算法在期望O(N^0.25)的时间把N分解出来,用exgcd求逆元之后直接代入. 因为懒,写了一个很短的模板.速度还行,进了第一…
Pollard-Rho 模板 板题-没啥说的- 求逆元出来后如果是负的记得加回正数 CODE #include<bits/stdc++.h> using namespace std; typedef long long LL; queue<int>arr; inline LL multi(LL a, LL b, LL p) { //快速乘 LL re = a * b - (LL)((long double) a / p * b + 1e-8) * p; return re <…
挺简单的,正好能再复习一遍 $exgcd$~ 按照题意一遍一遍模拟即可,注意一下 $pollard-rho$ 中的细节. #include <ctime> #include <cmath> #include <cstdio> #include <algorithm> #define ll long long #define ull unsigned long long #define setIO(s) freopen(s".in",&qu…
Pollard-Rho算法 总结了各种卡常技巧的代码: #define int long long typedef __int128 LL; IN int fpow(int a,int b,int mod){ int ans=1%mod; for(;b;b>>=1,a=(LL)a*a%mod) if(b&1) ans=(LL)ans*a%mod; return ans; } CO int p[3]={2,61,10007}; bool Miller_Rabbin(int n){ if(…
Description 一种非对称加密算法的密钥生成过程如下: 1. 任选两个不同的质数 p ,q 2. 计算 N=pq , r=(p-1)(q-1) 3. 选取小于r ,且与 r 互质的整数 e  4. 计算整数 d ,使得 ed≡1 mod r 5. 二元组 (N,e) 称为公钥,二元组 (N,d) 称为私钥 当需要加密消息 n 时(假设 n 是一个小于 N 整数,因为任何格式的消息都可转为整数表示),使用公钥 (N,e),按照 n^e≡c mod N 运算,可得到密文 c . 对密文 c…
pollard's rho模板题. 调参调到160ms无能为力了,应该是写法问题,不玩了. #include<bits/stdc++.h> using namespace std; typedef long long ll; ll e,p,c; ll mul(ll u,ll v){ return(u*v-ll((long double)u*v/p)*p+p)%p; } ll wop(ll u,ll v){ ll s=1; for(;v;v>>=1){ if(v&1)s=mu…
嘟嘟嘟 这题我读了两遍才懂,然后感觉要解什么高次同余方程--然后我又仔细的看了看题,发现只要求得\(p\)和\(q\)就能求出\(r\),继而用exgcd求出\(d\),最后用快速幂求出\(n\). 再看看这个数据范围,用Pollard-Rho最适合不过了. #include<cstdio> #include<iostream> #include<cmath> #include<algorithm> #include<cstring> #incl…
4522: [Cqoi2016]密钥破解 Time Limit: 10 Sec  Memory Limit: 512 MBSubmit: 290  Solved: 148[Submit][Status][Discuss] Description  一种非对称加密算法的密钥生成过程如下: 1.任选两个不同的质数p,q 2.计算N=pq,r=(p−1)(q−1) 3.选取小于r,且与r互质的整数e 4.计算整数d,使得ed≡1KQ/r 5.二元组(N,e)称为公钥,二元组(N,d)称为私钥 当需要加…
Portal 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\)的因数.具体原理是…
Visio Premium 2010密钥+破解激活方法: 在安装时能够使用下面密钥: GR24B-GC2XY-KRXRG-2TRJJ-4X7DC VWQ6G-37WBG-J7DJP-CY66Y-V278X 2T8H8-JPW3D-CJGRK-3HTVF-VWD83 HMCVF-BX8YB-JK46P-DP3KJ-9DRB2 22WT8-GGT7M-7MVKR-HF7Y4-MCWWD VX6BF-BHVDV-MHQ4R-KH9QD-6TQKV J4MVP-7F4X4-V8W2C-8VWXY-2KB…
正解:数论 解题报告: 先,放个传送门QwQ 这题难点可能在理解题意,,, 所以我先放个题意QAQ 大概就是说,给定一个整数N,可以被拆成两个质数的成绩p*q,然后给出了一个数e,求d满足e*d=1(mod r),其中r=(p-1)*(q-1),最后还会给定一个c,求dc%N umm就是几个板子题的堆砌昂,,,首先pollard_rho找到pq求出r,然后逆元求出d,最后快速幂走一波 然后就做完辣!over! 然后这里注意一下,就我个人的习惯的话我很喜欢快速幂求逆元,,,因为很简单很无脑,,,但…
CQOI 板子大赛之 pollard rho #include <iostream> #include <cstdio> using namespace std; typedef long long ll; ll e, N, c, jzm, p, q, r, d, n; ll gcd(ll a, ll b){ return !b?a:gcd(b,a%b); } ll mul(ll a, ll b, ll p){ ll re=0; while(b){ if(b&1) re =…
auto uninstaller 修复卸载工具 密钥注册机破解分享 只可以用于8.8.38,亲测可用 zhAAxzm5Wmmhzomyxyhoahra6AXrzy6X## hzWh6maaa5hmaharAJXAAmmmAbabzrx6## 5m6W5momJJxaooJbXxbAb6W8W5WJ6xzr## ba5WXoxW5W68xWxobmyXamWJJX5AAm5x## https://pan.baidu.com/s/1L2aprWccs8orlUOdU8v6pA…
4520: [Cqoi2016]K远点对 Time Limit: 30 Sec  Memory Limit: 512 MBSubmit: 638  Solved: 340[Submit][Status][Discuss] Description 已知平面内 N 个点的坐标,求欧氏距离下的第 K 远点对.   Input 输入文件第一行为用空格隔开的两个整数 N, K.接下来 N 行,每行两个整数 X,Y,表示一个点 的坐标.1 < =  N < =  100000, 1 < =  K &…
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4900 #include<cstring> #include<cmath> #include<iostream> #include<algorithm> #include<cstdio> #include<vector> #define N 40000007 #define FOR(a,b,c) for(int a=(b),a##…
题目传送门 [题目大意] 给定一个正整数N,可以被分解为两个不同的质数p和q,计算出r=(p-1)*(q-1). 然后给出了一个小于r且与r互质的整数e,已知e*d≡1(mod r),求d. 最后给定一个数c,求n=cd%N [思路分析] 这题总体来说思路真的很简单QWQ 首先既然是找因数,那么可以立刻想到Pollard-rho(其实只是因为这是一道Pollard-Rho的模板题) 然后求d的过程就是求e的乘法逆元嘛也很简单 最后求cd,就很明显是快速幂了 于是就……over了!? [代码实现]…
Description 在$[L, R]$找出有几个数满足两个条件 : 1 : 不同时含有$4$ 和 $8$ 2 : 至少有$3$个相邻的数相同 Solution 非常容易的数位DP, $pos$ 为当前第几位, $ex$ 表示是否出现过$4$ 或 $8$, $pre$表示 前面的是几, $num$表示有几个相邻的数相同. 答案就是 $sum[pos][ex][pre][num] $了QuQ. $DP$ 和 模板一样. 还需要注意如果$L = 1e10$ , 查$L - 1$ 时必须返回$0$…
感觉get到了一种数位dp的新姿势,加一位表示当前要填的数有没有限制(感觉以前的写法都太蠢了). 这么写有两个地方要注意: 1.每dp到一位时需要f[i][初始状态]++,相当于这位前都是前导零(这道题我把前两位填了两个10作为初始状态). 2.因为有了1,所以初始状态后的第一位不能填0,需要特判 f[i][j][k][l][p][q][o]表示填到第几位,上上位和上位分别是什么,4,8是否出现过,三个连续的是否出现过,以及当前位是否有限制. #include<iostream> #inclu…
怎么求一张无向图中任意两点之间的最小割? http://fanhq666.blog.163.com/blog/static/8194342620113495335724/ 一张无向图不同的最小割最多有n-1个. 所以可以用这些最小割建出一棵最小割树. #include<iostream> #include<cstring> #include<cstdio> #include<algorithm> #include<queue> #define i…
[题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=4520 [题目大意] 求K远点对距离 [题解] 修改估价函数为欧式上界估价,对每个点进行dfs, 因为是无向点对,在小根堆中保留前2k个距离, 不断更新堆顶元素即可. [代码] #include <cstdio> #include <algorithm> #include <queue> using namespace std; typedef long lo…
Time Limit: 30 Sec  Memory Limit: 512 MBSubmit: 1162  Solved: 618[Submit][Status][Discuss] Description 已知平面内 N 个点的坐标,求欧氏距离下的第 K 远点对.   Input 输入文件第一行为用空格隔开的两个整数 N, K.接下来 N 行,每行两个整数 X,Y,表示一个点 的坐标.1 < =  N < =  100000, 1 < =  K < =  100, K < =…
题面 题解 先筛出$<128$的质数,很少,打个表即可 然后钦定一个质数最大,不断替换即可(丢进大根堆里面,然后取出一个,替换在丢进去即可) 具体来说,设一个四元组$[t,x,y,z]$表示当前的总乘积为$t$,$x$为最大的质数,$y$表示为$x$的多少次方,最后一个$z$表示当前能枚举的右界. #include <cstdio> #include <cstring> #include <algorithm> #include <queue> usi…
Trie树的应用题目. 在线建立一棵01 Trie树,然后按照要求用询问在上面跑,用单调栈维护答案即可. #include<iostream> #include<cstdio> #include<cstring> #include<cstdlib> #include<string> #include<cmath> #include<ctime> #include<algorithm> #include<m…
这道题目很奇怪. 为什么奇怪?因为这道题用了一种叫分治最小割/最小割树的玩意. 以前从来没有见过这东西. 推荐一个讲这玩意的博客 写起来还是很顺手的. #include<iostream> #include<cstdio> #include<cstdlib> #include<cstring> #include<cmath> #include<ctime> #include<string> #include<ioma…
题目链接 容易发现如果我们求出p和q这题就差不多快变成一个sb题了. 于是我们就用Pollard Rho算法进行大数分解. 至于这个算法的原理,emmm 其实也不是很清楚啦 #include<cstdio> #include<cstring> #include<algorithm> #include<cstdlib> #include<cctype> #include<ctime> using namespace std; inlin…
比较基础的数位dp,dfs的时候带上上一位,上上位,是否已经有连续3个相同位,是否有4,是否有8即可 但是要注意两点(在洛谷上一直70) 当l=1e10的时候,直接输出clc(r)即可,因为如果再减去clc(l-1)的话,是会多减掉1的 还有判断前导0 #include<iostream> #include<cstdio> using namespace std; const int N=15; long long l,r,f[N][N][N][2][2][2],a[N],tot;…
算法详见:http://www.cnblogs.com/lokiii/p/8191573.html 求出点两两之间的最小割之后,把他们扔到map/set里跑即可 可怕的是map和set跑的时间竟然完全一样-代码里注释掉的部分是map #include<iostream> #include<cstdio> #include<cstring> #include<queue> #include<map> #include<set> usin…
Code: #include<bits/stdc++.h> #define ll long long #define maxn 200000 #define inf 100000000000000 #define lson (t[x].ch[0]) #define rson (t[x].ch[1]) #define mid ((l+r)>>1) using namespace std; void debug() { printf("no_problem\n");…
思路: N=P*Q 求出来P和Q 模拟就好- //By SiriusRen #include <cstdio> #include <algorithm> using namespace std; typedef long long ll; ll shai[10]={2,3,5,7,11,13,17,19,21,23}; ll mul(ll x,ll y,ll mod){ x%=mod;ll res=0; while(y){ if(y&1)res=(x+res)%mod; (…
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4521 dfs真好用~ #include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #define ll long long using namespace std; ; int dg[N]; ll l,r,dp[N][][N][][][]; ll dfs(int p…