题目链接

题意 : 给你n,e,c,并且知道me ≡ c (mod n),而且n = p*q,pq都为素数。

思路 : 这道题的确与题目名字很相符,是个RSA算法,目前地球上最重要的加密算法。RSA算法原理 。

看到这个算法之后,就知道这个题是求cd≡m(mod n),要求m,就要先求d,而d则是e的模反元素。

如果两个正整数a和n互质,那么一定可以找到整数b,使得 ab-1 被n整除,或者说ab被n除的余数是1。这时,b就叫做a的模反元素。

由模反元素可知,ed≡1(mod Phi[n])(phi[n]代表n的欧拉函数)。

根据欧拉函数性质可知,phi[n] = (p-1)*(q-1)。

求e的逆元d需要用扩展欧几里得,ed+k*phi[n]=1.要注意处理求出的d是负数的情况。

最后求cd就要用到快速幂模,然后再MOD n 就是所求m。

#include <stdio.h>
#include <string.h>
#include <iostream>
typedef long long LL ; using namespace std ; bool isprime(int n)
{
for(int i = ; i * i <= n ; i++)
{
if(n % i == ) return false ;
}
return true ;
}
int multimod(int a,int n,int m)
{
int tmp = a , res = ; while(n)
{
//printf("11\n") ;
if(n & )
{
res *= tmp ;
res %= m ;
}
tmp *= tmp ;
tmp %= m ;
n >>= ;
//printf("%d\n",n) ;
}
return res ;
}
void exde(int a,int b,int &x,int& y)
{
int t ;
if(b == )
{
x = ;
y = ;
return ;
//return a;
}
exde(b,a%b,x,y) ;
t = x ;
x = y ;
y = t-(a/b)*y;
//return d ;
}
int main()
{
int T ,e,c,n;
scanf("%d",&T) ;
while(T--)
{
scanf("%d %d %d",&e,&n,&c) ;
int p,q ,x,y;
//printf("1\n");
for(int i = ; i * i <= n ; i++)
{
if((n % i == ) && isprime(i) && isprime(n / i))
{
p = i ;
q = n / i ;
break ;
}
}
//printf("p = %d q = %d\n",p,q) ;
exde(e,(p-)*(q-),x,y);
//printf("%d %d\n",p,q) ;
int d = x ;
//printf("%d\n",d+(p-1)*(q-1)) ;
if(d < )
d = (d+(p-)*(q-)) %((p-)*(q-)) ;
//printf("%d\n",d) ;
int ans = multimod(c,d,n) ;
printf("%d\n",ans) ;
}
return ;
}

URAL 1141. RSA Attack(欧拉定理+扩展欧几里得+快速幂模)的更多相关文章

  1. bzoj 2242: [SDOI2011]计算器【扩展欧几里得+快速幂+BSGS】

    第一问快速幂板子 第二问把式子转化为\( xy\equiv Z(mod P)\rightarrow xy+bP=z \),然后扩展欧几里得 第三问BSGS板子 #include<iostream ...

  2. URAL 1141. RSA Attack RSA加密演算法

    标题来源:URAL 1141. RSA Attack 意甲冠军:给你e n c 并有m^e = c(mod n) 求 m 思路:首先学习RSA算法 here 过程大致是 1.发送的信息是m 2.随机选 ...

  3. ****ural 1141. RSA Attack(RSA加密,扩展欧几里得算法)

    1141. RSA Attack Time limit: 1.0 secondMemory limit: 64 MB The RSA problem is the following: given a ...

  4. 2^x mod n = 1(欧拉定理,欧拉函数,快速幂乘)

    2^x mod n = 1 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Tot ...

  5. BZOJ-1951 古代猪文 (组合数取模Lucas+中国剩余定理+拓展欧几里得+快速幂)

    数论神题了吧算是 1951: [Sdoi2010]古代猪文 Time Limit: 1 Sec Memory Limit: 64 MB Submit: 1573 Solved: 650 [Submit ...

  6. 1141. RSA Attack(RSA)

    1141 越来越喜欢数论了 很有意思 先看个RSA的介绍 RSA算法是一种非对称密码算法,所谓非对称,就是指该算法需要一对密钥,使用其中一个加密,则需要用另一个才能解密. RSA的算法涉及三个参数,n ...

  7. URAL 1204. Idempotents (扩展欧几里得)

    题目链接 题意 : 给你一个同余方程, x*x ≡ x  (mod n),让你求出所有的小于n的x. 思路 : 先来看同余的概念 :给定一个正整数m,如果两个整数a和b满足a-b能被m整除,即m|(a ...

  8. HDU1211 密文解锁 【扩展欧几里得】【逆元】

    <题目链接> <转载于 >>> > 题目大意: RSA是个很强大的加密数据的工具,对RSA系统的描述如下: 选择两个大素数p.q,计算n = p * q,F( ...

  9. Intel Code Challenge Final Round (Div. 1 + Div. 2, Combined) C.Ray Tracing (模拟或扩展欧几里得)

    http://codeforces.com/contest/724/problem/C 题目大意: 在一个n*m的盒子里,从(0,0)射出一条每秒位移为(1,1)的射线,遵从反射定律,给出k个点,求射 ...

随机推荐

  1. Ununto16.04版本Docker的安装2018年最新版本

    最近参照网上教程安装ubuntu的Docker怎么都不成功,我最后参照官方文档成功安装 https://docs.docker.com/engine/installation/linux/docker ...

  2. 关于Apache Phoenix和Cloudera结合

    1. 安装: phoenix的官网最新版4.13.2是有parcle版本的,并不需要从cloudera的labs(实验室)中下载.安装完成后,可以运行一下phoenix的shell来简单验证一下:/o ...

  3. android多渠道打包牛B工具

    http://www.orchidshell.com/ 兰贝壳儿:一个Eclipse插件,为Android开发提供了多渠道打包功能和一些工具类.

  4. fuser

    fuser 命令,查看正在被占用的文件:

  5. Linux:远程连接 SSH

    一.认识 SSH 定义 SSH(Secure shell):安全外壳协议:是建立在应用层基础上的安全协议: 通过 SSH 进行服务端连接,不容易被窃取信息: 连接服务器 ssh 服务器名 + @ + ...

  6. 乘积最大(线性dp)

    乘积最大 时间限制: 1 Sec  内存限制: 128 MB提交: 4  解决: 4[提交][状态][讨论版][命题人:quanxing] 题目描述 今年是国际数学联盟确定的“2000——世界数学年” ...

  7. monolog 应该是世界上最好的日志插件了

    引入 composer require monolog/monolog 官网 https://github.com/Seldaek/monolog 创建工具类 <?php /** * Creat ...

  8. ndnarry元素处理

    元素计算函数 ceil(): 向上最接近的整数,参数是 number 或 array floor(): 向下最接近的整数,参数是 number 或 array rint(): 四舍五入,参数是 num ...

  9. flask系列五之flask_script

    1.一个简单的例子 在工程里面新建一个Python文件命名为manage.py (1)安装flask_script包,然后引入 from flask_script import Manager fro ...

  10. Spring Cloud Eureka 1(eureka简介)

    Spring Cloud Eureka 是 Spring Cloud Netflix微服务套件中的一部分,基于netflix eureka做了二次封装,主要负责完成微服务架构中的服务治理功能. 服务治 ...