JZOJ4458. 【CQOI2016】密钥破解
来源:互联网 发布:java parquet 读写 编辑:程序博客网 时间:2024/05/02 01:42
题目大意
- 选取两个不同的质数
p , q - 令
N=p×q,r=(p−1)(q−1) - 选取一个小于
r 的整数e ,且e 与r 互质 - 计算整数
d 满足e⋅d ≡ 1 ( % r )
有以下两则性质:
1.
2.
现在已知
求
Data Constraint
对于
对于
对于
题解
对于
对于
对于
对于
这里引入一个算法——
具体细节,这里不再赘述,详见Pollard_rho.pdf
简述一下它的思想:
假如我们随机一个数,那么它是
其他的细节诸如生成随机数,和判环详见pdf。
温馨提醒:本体做乘法的时候会爆long long,可以用加法代替乘法。
SRC
#include<cstdio>#include<cstdlib>#include<cstring>#include<iostream>#include<algorithm>#include<cmath>#include<ctime>using namespace std ;typedef long long ll ;typedef unsigned long long ull ;ll e , N , c , D ;ll p , q , r , d ;void Exgcd( ll a , ll b , ll &x , ll &y ) { if ( b == 0 ) { x = 1 ; y = 0 ; return ; } Exgcd( b , a % b , x , y ) ; ll t = x ; x = y ; y = t - (a / b) * y ;}ll Calc() { ll x , y ; Exgcd( e , r , x , y ) ; return (x + r) % r ;}ll mul( ll x , ll y ) { if ( y == 1 ) return x ; return (2ll * mul( x , y / 2 ) % N + ( y % 2 ? x : 0 )) % N ;}ll Power( ll x , ll k ) { ll s = 1 ; while ( k ) { if ( k % 2 == 1 ) s = mul( s , x ) % N ; x = mul( x , x ) % N ; k /= 2 ; } return s ;}ll js( ll x ) { return x < 0 ? -x : x ; }ll f( ll x ) { return (mul( x , x ) + D) % N ; }ll gcd( ll x , ll y ) { return y == 0 ? x : gcd( y , x % y ) ; }int main() { freopen( "crack.in" , "r" , stdin ) ; freopen( "crack.out" , "w" , stdout ) ; srand( time(0) ) ; cin >> e >> N >> c ; D = rand() % N ; while ( 1 ) { ll a , b ; a = b = rand() % N + 1 ; while ( 1 ) { a = f(a) ; b = f(f(b)) ; if ( a == b ) break ; int d = gcd( js( a - b ) , N ) ; if ( d == 1 || d == N ) continue ; if ( d > 1 ) { p = d ; break ; } } if ( p ) break ; D -- ; } q = N / p ; r = N + 1 - (p + q) ; d = Calc() ; cout << d << " " << Power( c , d ) << endl ; return 0 ;}
以上.
- JZOJ4458. 【CQOI2016】密钥破解
- Jzoj4458 密钥破解——Pollard-rho
- CQOI2016 bzoj4522 密钥破解
- [bzoj4522][CQOI2016]密钥破解
- 【CQOI2016】密钥破解
- 4522: [Cqoi2016]密钥破解
- bzoj 4522 [Cqoi2016]密钥破解
- bzoj 4522: [Cqoi2016]密钥破解
- CQOI2016 密钥破解 pollard-rho
- BZOJ 4522: [Cqoi2016]密钥破解
- [BZOJ4522] [CQOI2016] 密钥破解 - Pollard-Rho - exgcd
- [Rho大整数分解] BZOJ 4522 [Cqoi2016]密钥破解
- bzoj4522【CQOI2016】秘钥破解
- CQOI2016
- cqoi2016
- 破解无线网络密钥
- VS2013密钥破解
- vs2015破解密钥
- Android酷炫实用的开源框架(UI框架)
- 【转】UnicodeDecodeError: 'utf-8' codec can't decode byte 0xc7 in position 1: invalid continuation 汉字编码
- linux机器上执行ping命令的java方法
- Android open cv 使用记录
- sql 添加外键及修改字段名称
- JZOJ4458. 【CQOI2016】密钥破解
- CF 651 E 并查集(矩阵关系不变) 挺好的
- Linux 无法从字符界面登陆 闪退
- Python:urllib 和urllib2之间的区别
- Gradle基础
- HDU-1695-GCD(Mobius反演/容斥)
- leetCode(66)-Excel Sheet Column Title
- Oracle数据库初级学习-y
- 关于Eclipse中代码全部变成黑色的解决方法