洛谷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}\ ...
随机推荐
- 教你一招:修复win7 系统自带的截图工具损坏
这个问题经常见,原因是注册表没有导入. 修复很简单. 打开资源管理器,在C盘中搜索到 tpcps.dll ,在其中选一个右击,选择注册dll,然后截图工具就被修复了. 有时候便签也会出现类似问题,方法 ...
- 【Oracle】ORA 01810 格式代码出现两次-转
一.Oracle中使用to_date()时格式化日期需要注意格式码 如:select to_date('2005-01-01 13:14:20','yyyy-MM-dd HH24:mm:ss') fr ...
- Scala学习笔记(四):apply方法说明
当scala中类或者对象有一个主要用途的时候,apply方法就是一个很好地语法糖.请看下面一个简单的例子: class Foo(foo: String) {} object Foo { def app ...
- [UFLDL] Generative Model
这一部分是个坑,应该对绝大多数菜鸡晕头转向的部分,因为有来自物理学界的问候. Deep learning:十九(RBM简单理解) Deep learning:十八(关于随机采样) 采样方法 [B ...
- Tomcat -- 启动错误 -- 解决锦集
java.lang.NoSuchMethodException: org.apache.catalina.deploy.WebXml addFilter :在Tomacat7的context.xml文 ...
- rar压缩find查找到的文件
find . -name 'CMakeLists.txt' | xargs /d/Program\ Files/WinRAR/rar.exe a -r ./out.rar $ ------------ ...
- [原]openstack-kilo--issue(十九) ImportError: Could not import settings 'openstack_dashboard.settings' (Is it on sys.path? Is there an import error in the settings file?): No module named main
查看此问题的时候请先查看 这个问题包含在(十)中,此篇只是从(十)中分离出来 openstack-kilo--issue(十)ERROR: openstack Unable to establish ...
- ZOJ Problem Set - 2014 Piggy-Bank【完全背包】
Description Before ACM can do anything, a budget must be prepared and the necessary financial suppor ...
- Entity Framework DbSet<T>之Include方法与IQueryable<T>扩展方法Include的使用
Entity Framework使用Code First方式时,实体之间已经配置好关系,根据实际情况某些情况下需要同时获取导航属性,比如获取商品的同时需要获取分类属性(导航属性),或者基于优化方面考虑 ...
- RMQ算法详解
RMQ算法,是一个快速求区间最值的离线算法,预处理时间复杂度O(n*log(n)),查询O(1),所以是一个很快速的算法. 当然这个问题用线段树同样能够解决,算法复杂度为:O(N)~O(logN) . ...