美文网首页
[蓝桥杯2019初赛]RSA解密

[蓝桥杯2019初赛]RSA解密

作者: Vincy_ivy | 来源:发表于2020-02-06 20:21 被阅读0次
    #include <bits/stdc++.h>
    using namespace std;
    long long n=1001733993063167141;
    long long d=212353;
    long long c=20190324;
    long long p=891234941;
    long long q=1123984201;
    long long e=823816093931522017;
    long long phi=(p-1)*(q-1);
    void Ex_gcd(long long a,long long b,long long &x,long long &y)     // 欧几里得算法求逆元
    {
        if(b==0)
        {
            x=1;
            y=0;
            return ;
        }
        long long x1,y1;
        Ex_gcd(b,a%b,x1,y1);
        x=y1;
        y=x1-(a/b)*y1;
    }
    long long quickmul(long long a,long long b)    //快速乘求每次的余数
    {
        long long sum=0;
        while(b)
        {
            if(b%2==1)
                sum=(sum+a)%n;
            a=(a+a)%n;
            b=b/2;
        }
        return sum;
    }
    long long quickmod(long long a,long long b)          //快速幂
    {
        long long ans=1;
        while(b)
        {
            if(b%2==1)//末位是1;
                ans=quickmul(ans,a);//这是直接的回溯法,从最后一位起,如果,如果最后一位是1,则乘a,然后在进行乘以它本身,以为乘1之后一定为偶数,也就是b/2;
            a=quickmul(a,a);
            b=b/2;
        }
        return ans;
    }
    int main()
    {
        long long x,y;
        Ex_gcd(d,(q-1)*(p-1),x,y);
        x=(x+phi)%phi;    //让x为正
        printf("e=%lld\n",x);
        printf("ans=%lld\n",quickmod(c,e));
        return 0;
    }
    

    相关文章

      网友评论

          本文标题:[蓝桥杯2019初赛]RSA解密

          本文链接:https://www.haomeiwen.com/subject/cwouxhtx.html