第十屆藍橋杯 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^e%n
x=c^d%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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章