洛谷P4358密钥破解 [CQOI2016] 数论
正解:数论
解题报告:
这题难点可能在理解题意,,,
所以我先放个题意$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] 数论的更多相关文章
- 洛谷 P2220 [HAOI2012]容易题 数论
洛谷 P2220 [HAOI2012]容易题 题目描述 为了使得大家高兴,小Q特意出个自认为的简单题(easy)来满足大家,这道简单题是描述如下: 有一个数列A已知对于所有的A[i]都是1~n的自然数 ...
- 洛谷P4204 [NOI2006]神奇口袋 数论
正解:数论 解题报告: 传送门 第一次用\(\LaTeX\)和\(markdown\),,,如果出了什么锅麻烦在评论跟我港句QAQ \(1)x_{i}\)可以直接离散 \(2)y_{i}\)的顺序对结 ...
- 洛谷P2261 [CQOI2007] 余数求和 [数论分块]
题目传送门 余数求和 题目背景 数学题,无背景 题目描述 给出正整数n和k,计算G(n, k)=k mod 1 + k mod 2 + k mod 3 + … + k mod n的值,其中k mod ...
- 洛谷P3166 数三角形 [CQOI2014] 数论
正解:数论 解题报告: 传送门! 很久以前做的题了呢,,,回想方法还想了半天QAQ 然后写这题题解主要是因为看到了好像有很新颖的法子,就想着,学习一下趴,那学都学了不写博客多可惜 首先港下最常规的方法 ...
- 洛谷P2312 解方程 [noip2014] 数论
正解:数论 解题报告: 这儿是,传送门qwq 又是很妙的一道题呢,专门用来对付我这种思维僵化了的傻逼的QAQ 首先看题目的数据范围,发现a<=1010000,很大的一个数据范围了呢,那这题肯定不 ...
- 洛谷P1403 [AHOI2005] 约数研究 [数论分块]
题目传送门 约数研究 题目描述 科学家们在Samuel星球上的探险得到了丰富的能源储备,这使得空间站中大型计算机“Samuel II”的长时间运算成为了可能.由于在去年一年的辛苦工作取得了不错的成绩, ...
- 洛谷$P5444\ [APIO2019]$奇怪装置 数论
正解:数论 解题报告: 传送门$QwQ$ 我好像当初考的时候这题爆零了,,,部分分都没想到,,,我真的好菜$kk$ 考虑如果在$t_1,t_2$两个时刻有$x_1=x_2,y_1=y_2$是什么情况$ ...
- Luogu P4358 密钥破解 题解报告
题目传送门 [题目大意] 给定一个正整数N,可以被分解为两个不同的质数p和q,计算出r=(p-1)*(q-1). 然后给出了一个小于r且与r互质的整数e,已知e*d≡1(mod r),求d. 最后给定 ...
- 洛谷P4456 交错序列[CQOI2018] dp+数论
正解:dp 解题报告: 传送门 首先可以先拆下这个贡献式,为了方便之后设状态什么的,把式子转成和ny有关,就成了 \(\sum \left ( n-i \right )^{a}\cdot i^{b}\ ...
随机推荐
- Vue中的computed属性
阅读Vue官网的过程中,对于计算属于与监听器章节的内容有点理解的不清晰:https://cn.vuejs.org/v2/guide/computed.html. 后来上网查询了资料,结合官网的说明,总 ...
- 练手之RimLight
简单写写,练下手~ Shader "James/VP Shader/RimLight" { Properties { _MainTex("MainTex", 2 ...
- Java知多少(54)断言详解
断言的概念 断言用于证明和测试程序的假设,比如“这里的值大于 5”.断言可以在运行时从代码中完全删除,所以对代码的运行速度没有影响. 断言的使用 断言有两种方法: 一种是 assert<< ...
- DWZ使用中遇到的坑
DWZ官方文档中关于文件上传表单的提交: 因为Ajax不支持enctype="multipart/form-data" 所以用隐藏iframe来处理无刷新表单提交. <for ...
- Tomcat容器做到自我保护,设置最大连接数(服务限流:tomcat请求数限制)
http://itindex.net/detail/58707-%E5%81%87%E6%AD%BB-tomcat-%E5%AE%B9%E5%99%A8 为了确保服务不会被过多的http长连接压垮,我 ...
- 【Docker】容器操作(转)
来自:https://www.cnblogs.com/zydev/p/5803461.html 列出主机上的容器 列出正在运行的容器: docker ps 列出所有容器: docker ps - ...
- ethereum发erc20token
以太坊发币智能合约代码简单介绍: 发币代码如下(https://ethereum.org/token#the-code网站中获得): pragma solidity ^; interface toke ...
- SyntheticEvent
在react 的事件中使用SyntheticEvent 就会出现下面的报错 <input onChange={async e => { await foo() ... }} /> 那 ...
- thinkphp 无限极 评论
郑创 今天用啦一天的时间用了各种方法终于把评论成无限极了,随便评论,有判断自己不能评论自己,下面先说前台源代码! 要实现的视图 前台源代码html模板 <div class="wen_ ...
- 解决css设置背景透明,文字不透明
设置元素的透明度: -moz-opacity:0.8; /*在Firefox中设置元素透明度 filter: alpha(opacity=80); /*ie使用滤镜设置透明 但是当我们对一个标 ...