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 = (re + a) % p;
a = (a + a) % p;
b >>= 1;
}
return re;
}
ll pollardRho(){
ll x=2, y=2;
while(true){
x = (mul(x,x,N)+jzm) % N;
y = (mul(y,y,N)+jzm) % N;
y = (mul(y,y,N)+jzm) % N;
if(x==y) return 1;
ll re=gcd(x>y?x-y:y-x, N);
if(re>1) return re;
}
}
ll exgcd(ll a, ll b, ll &x, ll &y){
if(!b){
x = 1;
y = 0;
return a;
}
ll re=exgcd(b, a%b, x, y);
ll z=x;
x = y;
y = z - (a / b) * y;
return re;
}
ll ksm(ll a, ll b, ll p){
ll re=1;
while(b){
if(b&1) re = mul(re, a, p);
a = mul(a, a, p);
b >>= 1;
}
return re;
}
int main(){
cin>>e>>N>>c;
do{
jzm++;
p = pollardRho();
}while(p==1);
q = N / p;
r = (p - 1) * (q - 1);
ll dddddd;
exgcd(e, r, d, dddddd);
d = (d % r + r) % r;
n = ksm(c, d, N);
cout<<d<<" "<<n<<endl;
return 0;
}

loj2045 「CQOI2016」密钥破解的更多相关文章

  1. LibreOJ2045 - 「CQOI2016」密钥破解

    Portal Description 给出三个正整数\(e,N,c(\leq2^{62})\).已知\(N\)能表示成\(p\cdot q\)的形式,其中\(p,q\)为质数.计算\(r=(p-1)( ...

  2. LoibreOJ 2042. 「CQOI2016」不同的最小割 最小割树 Gomory-Hu tree

    2042. 「CQOI2016」不同的最小割 内存限制:256 MiB时间限制:1000 ms标准输入输出 题目类型:传统评测方式:文本比较 上传者: 匿名 提交提交记录统计讨论测试数据   题目描述 ...

  3. loj #2044. 「CQOI2016」手机号码

    #2044. 「CQOI2016」手机号码 内存限制:256 MiB时间限制:1000 ms标准输入输出 题目类型:传统评测方式:文本比较 上传者: 匿名 提交提交记录统计讨论测试数据   题目描述 ...

  4. LibreOJ2044 - 「CQOI2016」手机号码

    Portal Description 给出两个十一位数\(L,R\),求\([L,R]\)内所有满足以下两个条件的数的个数. 出现至少\(3\)个相邻的相同数字: 不能同时出现\(4\)和\(8\). ...

  5. LibreOJ2043 - 「CQOI2016」K 远点对

    Portal Description 给出平面上的\(n(n\leq10^5)\)个整点,求在欧几里得距离下第\(k\)远的点对之间的距离. Solution k-d树+堆. 用小根堆维护当前找到的第 ...

  6. LibreOJ2042 - 「CQOI2016」不同的最小割

    Portal Description 给出一个给出一个\(n(n\leq850)\)个点\(m(m\leq8500)\)条边的无向图.定义\(cut(s,t)\)等于\(s,t\)的最小割的容量,求在 ...

  7. 「CQOI2016」不同的最小割

    「CQOI2016」不同的最小割 传送门 建出最小割树,把每一个点对的最小割抠出来 \(\text{unique}\) 一下就好了. 参考代码: #include <algorithm> ...

  8. 「CQOI2016」K 远点对

    /* 考虑暴力 可以n ^ 2枚举点对 然后用一个容量为2k的小根堆来维护第k大 kd-tree呢就是来将这个暴力优化, 每次先找远的并且最远距离不如堆顶的话就不继续找下去 貌似挺难构造数据卡的 */ ...

  9. 【LOJ】#2047. 「CQOI2016」伪光滑数

    题解 可持久化可并堆 用\(f[i,j]\)表示最大的质数标号为i,然后有j个质数乘起来 用\(g[i,j]\)表示\(\sum_{k = 1}^{i}f[k,j]\) 转移是 \(f[i,j] = ...

随机推荐

  1. 根据要求完成表单以及使用servlet处理表单 任务要求 掌握Servlet输出表单和接收表单数据(多值组件的读取)。

    Servlet代码: package com.test; import java.io.IOException; import java.io.PrintWriter; import java.uti ...

  2. JS转换日期格式

    // 对Date的扩展,将 Date 转化为指定格式的String // 月(M).日(d).小时(h).分(m).秒(s).季度(q) 可以用 1-2 个占位符, // 年(y)可以用 1-4 个占 ...

  3. php 02

    变量的数据类型 一.类型 标量类型: 布尔型 整型 浮点型 字符串 复合类型:  数组  对象 特殊类型:  资源 null 1. 布尔型 true  false 以下值认为是false  其他值都认 ...

  4. Java字节流与字符流的区别详解

    字节流与字符流 先来看一下流的概念: 在程序中所有的数据都是以流的方式进行传输或保存的,程序需要数据的时候要使用输入流读取数据,而当程序需要将一些数据保存起来的时候,就要使用输出流完成. 程序中的输入 ...

  5. Python对Excel操作详解

      Python对Excel操作详解 文档摘要: 本文档主要介绍如何通过python对office excel进行读写操作,使用了xlrd.xlwt和xlutils模块.另外还演示了如何通过Tcl   ...

  6. 笔记 Activator.CreateInstance(Type)

    这段代码取自NopCommerce 3.80 的 权限列表初始化代码 dynamic provider = Activator.CreateInstance(providerType);   文件位置 ...

  7. Python开发第二篇

    运算符 1.算术运算符 % 取余运算符,返回余数 ** 幂运算符 //返回商的整数部分 2.逻辑运算符 and  与运算符 a and b 如果a为False是,表达式为False,如果a为True返 ...

  8. 访问mongo数据库报错

    It looks like you are trying to access MongoDB over HTTP on the native driver port. 出错原因: 1.没有安装mong ...

  9. Atom打造轻量化C/C++ IDE

    写在前面 近期沉迷Atom的颜值无法自拔,在github的光环下,Atom凭借自身良好的素质,获得了大量开发者的青睐.随之而来的就是丰富的插件库,在插件帮助下,它对各种编程语言都有相当好的支持.对与一 ...

  10. mysqlimport命令

    mysqlimport的大多数选项直接对应LOAD DATA INFILE子句. 选项: -u,--user 指定连接用户名.   -p,--password[name] 指定连接用户的密码.   - ...