第十届蓝桥杯 A组 RSA解密

这次蓝桥杯对于acm学数学的太友好了

emmm 然而还是菜啊

我和填空最后一题死磕了一个小时 (太蠢了)没有Python写Java大数写到自闭

 题目大意:

n=p*q
p,q为素数
d与(p-1)*(q-1)互素
(d*e)%((p-1)*(q-1))=1
c=x^d%n
x=c^e%n

给定d,c,n
求x

素数筛可以求出p,q  用欧几里得验证是否满足互素条件,快速幂直接乘会爆longlong,所以要用快速乘+快速幂

#Python 大法好
p=891234941
q=1123984201
n=1001733993063167141
c=20190324
d=212353
for i in range(1,500000):       #枚举因子   d*e%((p-1)*(q-1))=1    (((q-1)*(p-1))*yz+1) %d =0
    if(((p-1)*(q-1)*i+1)%d==0):
        e=((p-1)*(q-1)*i+1)//212353
        print(((p-1)*(q-1)*i+1)//d) 
        break
def quick_mod(a,b,c):
    a=a%c
    ans=1
    while b!=0:
        if b&1:
            ans=(ans*a)%c
        b>>=1
        a=(a*a)%c
    return ans
x=quick_mod(c,e,n)             #x=c^e%n   579706994112328949
print(x)
print(quick_mod(x,d,n))        #c=x^d%n

为什么我的考场没有Python 啊啊啊o(╥﹏╥)o

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值