正解:数论

解题报告:

先,放个传送门$ QwQ $

这题难点可能在理解题意,,,

所以我先放个题意$QAQ$

大概就是说,给定一个整数$N$,可以被拆成两个质数的成绩$p\cdot q$,然后给出了一个数$e$,求$d$满足$e\cdot d\equiv 1 (mod\ r)$,其中$ r = ( p - 1 )\cdot ( q - 1 ) $,最后还会给定一个 $ c $ ,求$ d^{c}\ mod\ N$

$umm$就是几个板子题的堆砌昂,,,首先$pollard\ rho$找到$p\ q$求出$r$,然后逆元求出$d$,最后快速幂走一波

然后就做完辣!$over$!

然后这里注意一下,就我个人的习惯的话我很喜欢快速幂求逆元,,,因为很简单很无脑,,,但是这道题因为不保证互质所以不能用快速幂,只能用$exgcd$

另,有一个关于卡时限的小发现,首先显然龟速乘是真的很慢嘛,但是我发现,好像用$long\ double$乘比$int128$乘要慢,,,我也布吉岛为什么$QAQ$反正好像是这样儿的以后打的时候可以注意下$QAQ$

然后就麻油辣?放个代码$QwQ$

// luogu-judger-enable-o2
#include<bits/stdc++.h>
using namespace std;
#define il inline
#define ll __int128
#define gc getchar()
#define rl register ll
#define rc register char
#define rb register bool
#define rp(i,x,y) for(rl i=x;i<=y;++i) ll e,n,c,p,q,d,r; il ll read()
{
rc ch=gc;rl x=;rb y=;
while(ch!='-' && (ch>'' || ch<''))ch=gc;
if(ch=='-')ch=gc,y=;
while(ch>='' && ch<='')x=(x<<)+(x<<)+(ch^''),ch=gc;
return y?x:-x;
}
il ll gcd(rl gd,rl gs){return !gs?gd:gcd(gs,gd%gs);}
il ll multi(rl gd,rl gs,rl mod){return 1ll*gd*gs%mod;}//{rl tmp=((long double)gd/mod*gs+1e-8)*mod;return gd*gs-tmp<0?gd*gs-tmp+mod:gd*gs-tmp;}
il ll rrand(){return 1ll*rand()<<^rand();}
il ll randd(){return 1ll*rrand()<<^rrand();}
il ll power(rl x,rl y,rl mod){rl ret=;while(y){if(y&)ret=ret*x%mod;x=x*x%mod;y>>=;}return ret;}
il bool miller_rabin(rl x)
{
if(x== || x== || x==)return true;
if(x%== || x%== || x%==)return false;
rp(i,,)
{
rl gdgs=rand()%(x-)+;if(power(gdgs,x-,x)!=)return false;rl poww=x-;
while(!(poww&))
{
poww>>=;
rl tmp=power(gdgs,poww,x);
if(multi(tmp,tmp,x)== && tmp!= && tmp!=x-)return false;
}
}
return true;
}
il ll pollard_rho(rl x)
{
if(!(x%))return ;if(!(x%))return ;
rl gs=randd()%x,tmp=randd()%x,gd=(multi(gs,gs,x)+tmp)%x,tim=,timlim=;
while()
{
++tim;gd=(multi(gd,gd,x)+tmp)%x;
rl gcdd=gcd((gd-gs+x)%x,x);
if(gd==gs || !tmp)return x;if(gcdd!= && gcdd!=x)return gcdd;if(!(tim^timlim))timlim<<=,gs=gd;
}
}
void exgcd(ll a,ll b,ll &x,ll &y){if(!b){x=;y=;return;}exgcd(b,a%b,y,x);y-=a/b*x;}
il ll inv(rl a,rl b){rl x,y;exgcd(a,b,x,y);return (x%b+b)%b;}
int main()
{
// freopen("4358.in","r",stdin);freopen("4358.out","w",stdout);
srand(time(NULL));
e=read(),n=read(),c=read();
p=pollard_rho(n);while(!miller_rabin(p))p=pollard_rho(n);q=n/p;r=(p-)*(q-);
// printf("p=%lld r=%lld q=%lld ???=%lld ???=%lld ???=%lld\n",p,r,q,(p-1)*(q-1),p-1,q-1);
d=inv(e,r);printf("%lld ",d);printf("%lld\n",power(c,d,n));
return ;
}

洛谷P4358密钥破解 [CQOI2016] 数论的更多相关文章

  1. 洛谷 P2220 [HAOI2012]容易题 数论

    洛谷 P2220 [HAOI2012]容易题 题目描述 为了使得大家高兴,小Q特意出个自认为的简单题(easy)来满足大家,这道简单题是描述如下: 有一个数列A已知对于所有的A[i]都是1~n的自然数 ...

  2. 洛谷P4204 [NOI2006]神奇口袋 数论

    正解:数论 解题报告: 传送门 第一次用\(\LaTeX\)和\(markdown\),,,如果出了什么锅麻烦在评论跟我港句QAQ \(1)x_{i}\)可以直接离散 \(2)y_{i}\)的顺序对结 ...

  3. 洛谷P2261 [CQOI2007] 余数求和 [数论分块]

    题目传送门 余数求和 题目背景 数学题,无背景 题目描述 给出正整数n和k,计算G(n, k)=k mod 1 + k mod 2 + k mod 3 + … + k mod n的值,其中k mod ...

  4. 洛谷P3166 数三角形 [CQOI2014] 数论

    正解:数论 解题报告: 传送门! 很久以前做的题了呢,,,回想方法还想了半天QAQ 然后写这题题解主要是因为看到了好像有很新颖的法子,就想着,学习一下趴,那学都学了不写博客多可惜 首先港下最常规的方法 ...

  5. 洛谷P2312 解方程 [noip2014] 数论

    正解:数论 解题报告: 这儿是,传送门qwq 又是很妙的一道题呢,专门用来对付我这种思维僵化了的傻逼的QAQ 首先看题目的数据范围,发现a<=1010000,很大的一个数据范围了呢,那这题肯定不 ...

  6. 洛谷P1403 [AHOI2005] 约数研究 [数论分块]

    题目传送门 约数研究 题目描述 科学家们在Samuel星球上的探险得到了丰富的能源储备,这使得空间站中大型计算机“Samuel II”的长时间运算成为了可能.由于在去年一年的辛苦工作取得了不错的成绩, ...

  7. 洛谷$P5444\ [APIO2019]$奇怪装置 数论

    正解:数论 解题报告: 传送门$QwQ$ 我好像当初考的时候这题爆零了,,,部分分都没想到,,,我真的好菜$kk$ 考虑如果在$t_1,t_2$两个时刻有$x_1=x_2,y_1=y_2$是什么情况$ ...

  8. Luogu P4358 密钥破解 题解报告

    题目传送门 [题目大意] 给定一个正整数N,可以被分解为两个不同的质数p和q,计算出r=(p-1)*(q-1). 然后给出了一个小于r且与r互质的整数e,已知e*d≡1(mod r),求d. 最后给定 ...

  9. 洛谷P4456 交错序列[CQOI2018] dp+数论

    正解:dp 解题报告: 传送门 首先可以先拆下这个贡献式,为了方便之后设状态什么的,把式子转成和ny有关,就成了 \(\sum \left ( n-i \right )^{a}\cdot i^{b}\ ...

随机推荐

  1. Scala学习笔记——内建控制结构

    Scala的内建控制结构包括:if.while.for.try.match和函数调用 1.if表达式 //常见的写法 var filename = "name" if (!args ...

  2. for循环 while循环 break跳出循环 continue结束本次循环 exit退出整个脚本

  3. JS中lambda表达式的优缺点和使用场景(转)

    add by zhj: 最近在看ES6,看到了箭头函数,我个人感觉箭头函数适用于函数体中不用this的匿名函数,在箭头函数中使用this是一个坑 原文:http://ourjs.com/detail/ ...

  4. [CNN] Understanding Convolution

    From: http://blog.csdn.net/zouxy09/article/details/49080029 一个概念需经过反复的推敲以及时间的沉淀,之后才能真正理解 [OpenCV] Im ...

  5. HttpWatch工具简介及使用技巧

    一 概述: HttpWatch强大的网页数据分析工具.集成在Internet Explorer工具栏.包括网页摘要.Cookies管理.缓存管理.消息头发送/接受.字符查询.POST 数据和目录管理功 ...

  6. DDoS(Distributed Denial of Service,分布式拒绝服务)

    DDoS:Distributed Denial of Service,即分布式拒绝服务攻击. 借助于客户/服务器技术,将多个计算机联合起来作为攻击平台,对一个或多个目标发动DDoS攻击,从而成倍地提高 ...

  7. Python----八荣八耻

    以动手实践为荣 , 以只看不练为耻; 以打印日志为荣 , 以单步跟踪为耻; 以空格缩进为荣 , 以制表缩进为耻; 以单元测试为荣 , 以人工测试为耻; 以模块复用为荣 , 以复制粘贴为耻; 以多态应用 ...

  8. day7 七、字符编码,字符字节与文件操作

    一.字符编码 1.定义:人类能识别的是字符等高级标识符,电脑只能识别0,1组成的标识符,要完成人与机器之间的信息交流,一定需要一个媒介,进行两种标识符的转化(两种标识符的对应关系) 对应关系形成的结构 ...

  9. day6 六、元组、字典、集合的基本操作和内置方法

    一.元组 1.定义 # 元组tuple # 记录多个值,当值没有改的需求是,建议用元组更好 # 定义:在()内用逗号分开任意类型的值 # name = (, , 300.5]) # print(nam ...

  10. 怎样将M4A音频格式转换成MP3格式

    因为MP3音频格式应用的广泛性,所以很多时候我们都需要将不同的音频格式转换成MP3格式的,那么如果我们需要将M4A音频格式转换成MP3格式,我们应该怎样进行实现呢?下面我们就一起来看一下吧. 操作步骤 ...