CQOI2016 密钥破解 pollard-rho
来源:互联网 发布:matlab 矩阵布尔运算 编辑:程序博客网 时间:2024/05/01 23:45
鬼畜的大整数分割算法泼辣的肉,纯属人品优化,然而能跑的飞快。
反正很强的一个鬼东西 学习链接已经狗带了,不过网上大把
/* ***********************************************Author :BPM136Created Time :2016/4/24 20:41:18File Name :A.cpp************************************************ */#include<iostream>#include<cstdio>#include<algorithm>#include<cstdlib>#include<cmath>#include<cstring>#include<iomanip>#include<bitset>#include<queue>#include<ctime>#include<set>#include<utility>#include<vector>#include<functional>#include<numeric>#include<memory>#include<iterator>#define LL long long#define DB double#define LB long double#define UL unsigned long#define ULL unsigned long long#define pb push_back#define popb pop_back#define get(a,i) a&(1<<(i-1))#define PAU putchar(32)#define ENT putchar(10)#define clr(a,b) memset(a,b,sizeof(a))#define fo(_i,_a,_b) for(int _i=_a;_i<=_b;_i++)#define fd(_i,_a,_b) for(int _i=_a;_i>=_b;_i--)#define efo(_i,_a) for(int _i=last[_a];_i!=0;_i=e[_i].next)#define file(x) freopen(#x".in","r",stdin),freopen(#x".out","w",stdout)#define filein(x) freopen(#x".in","r",stdin)#define fileout(x) freopen(#x".out","w",stdout)#define mkd(x) freopen(#x".in","w",stdout);#define setlargestack(x) int size=x<<20;char *p=(char*)malloc(size)+size;__asm__("movl %0, %%esp\n" :: "r"(p));#define end system("pause")using namespace std;LL read(){ LL f=1,d=0;char s=getchar(); while (s<48||s>57){if (s==45) f=-1;s=getchar();} while (s>=48&&s<=57){d=d*10+s-48;s=getchar();} return f*d;}LL readln(){ LL f=1,d=0;char s=getchar(); while (s<48||s>57){if (s==45) f=-1;s=getchar();} while (s>=48&&s<=57){d=d*10+s-48;s=getchar();} while (s!=10) s=getchar(); return f*d;}inline void write(LL x){ if(x==0){putchar(48);return;}if(x<0)putchar(45),x=-x; int len=0,buf[20];while(x)buf[len++]=x%10,x/=10; for(int i=len-1;i>=0;i--)putchar(buf[i]+48);return;}inline void writeln(LL x){write(x);ENT;}const LL MODr = 1000000007LL;LL e, N, c;LL r, d, n;LL p, q;LL C = 2;LL MUL(LL a, LL k, LL MOD) {LL ret = 0;while (k) {if(k & 1) ret = (ret + a) %MOD;a = (a + a) %MOD;k >>= 1;}return ret;}LL KSM(LL a, LL k, LL MOD) {LL ret = 1;while (k) {if(k & 1) ret = MUL(ret, a, MOD);a = MUL(a, a, MOD);k >>= 1;}return ret;}LL gcd(LL a, LL b) {return b == 0 ? a: gcd(b, a % b);}LL f(LL x) {LL ret = ( (LL) MUL(x, x, N) + C ) % N;return ret;}void PLrho(LL x) {p = f(1);q = f(p);while (1) {LL GCD = gcd( abs( p - q ), x);if(GCD > 1 || GCD == x) {p = GCD;q = x / p;return ;}p = f(p);q = f( f(q) );if( p == q ) {C = 1LL * ((rand() * rand() % N) * (rand() * rand() % N)) % N;while(p != q) {p = f(1);q = f(p);}}}}struct node {LL x, y;};node Exgcd(LL a, LL b) {if(b == 0) {node ret ;ret.x = 1;ret.y = 0;return ret;}node tmp = Exgcd(b, a % b);node ret;ret.x = tmp.y;ret.y = tmp.x - (a / b) * tmp.y;return ret;}int main() {//DB tt = clock();//file(A);e=read(), N=read(), c=read();PLrho(N);//cout<< clock() - tt <<endl;r = (p - 1) * (q - 1);node tmp = Exgcd(e, r);d = tmp.x; d = (d % r + r) %r;n = KSM(c, d, N);cout<< d << ' ' << n <<endl;return 0;}
0 0
- CQOI2016 密钥破解 pollard-rho
- [BZOJ4522] [CQOI2016] 密钥破解 - Pollard-Rho - exgcd
- Jzoj4458 密钥破解——Pollard-rho
- NKOJ 3614(CQOI 2016) 密钥破解(Pollard Rho)
- [Rho大整数分解] BZOJ 4522 [Cqoi2016]密钥破解
- CQOI2016 bzoj4522 密钥破解
- JZOJ4458. 【CQOI2016】密钥破解
- [bzoj4522][CQOI2016]密钥破解
- 【CQOI2016】密钥破解
- 4522: [Cqoi2016]密钥破解
- pollard rho
- bzoj 4522 [Cqoi2016]密钥破解
- bzoj 4522: [Cqoi2016]密钥破解
- BZOJ 4522: [Cqoi2016]密钥破解
- Pollard Rho method
- Pollard's Rho Method
- Pollard Rho算法思想
- Pollard Rho 大数分解
- Appium九宫格滑动解锁研究
- 包含min函数的栈
- TCP/IP和http全称和概述
- 实践--ViewPager实现App引导页
- vim下ctags+taglist环境的搭建
- CQOI2016 密钥破解 pollard-rho
- java.util包---LinkedList
- web服务器的工作原理及相关协议
- netstat命令使用
- linux常用查看硬件设备信息命令
- HDU 1008 猜数字
- 贪心算法☞磁盘文件最优存储问题
- python文件读写
- 分享我原油金融直播系统开发的过程心得