NYOJ-769乘数密码,逆元解法;

来源:互联网 发布:mysql data free 编辑:程序博客网 时间:2024/06/07 05:37

乘数密码

时间限制:1000 ms  |  内存限制:65535 KB
难度:1
                                                                                                                        ->    Link    <-

   简单代替密码的第二种,比移位密码稍微复杂点,不过鉴于NYOJ,是完全可以暴力的,这里主要是介绍一种逆元解法;

   加密公式:Ek(m)=k*m%q,gcd(k,q)=1;

   解密算法:Dk(c)=cK^-1%q,K^-1为k在模q下的乘法逆元。

   那么怎么算这个逆元的,可以用扩展欧几里德算法;但注意K^-1*k%q=1;所以也可以暴力解;

 #include<bits/stdc++.h>using namespace std;char a[55];int main(){    int x,i;    while(~scanf("%s%d",a,&x))    {        for(i=1 ;; i++)            if((26*i+1)%x==0)//暴力求逆元;                break;         x=(26*i+1)/x;         int n=strlen(a);         for(i=0;i<n;i++)             printf("%c",x*(a[i]-65)%26+'A');             printf("\n");    }  return 0;}        

0 0
原创粉丝点击