乘数密码
时间限制:
1000 ms | 内存限制:
65535 KB
难度:
1
-
描述
-
乘数密码也是一种替换密码,其加密变换是将明文字母串逐位乘以密钥k并进行模运算,数学表达式如下:
E(m)=k*m mod q, gcd(k,q)=1 (即k,q互素)。
当k与q互素时,明文字母加密成密文字母的关系为一一映射。
现有一经过乘法加密的密文,请破译出它的明文。
-
输入
-
输入包含多组数据,不超过1000组。
每组包含一个字符串和一个正整数k,字符串全部由大写字母组成,长度不超过50,k是与q互素的数,q=26,k<26。
输出
- 每组输出数据单独占一行,输出对应的明文。 样例输入
-
ILOVEYOU 3
样例输出
-
UVWHKIWY
来源
- 密码系列 上传者
#include<iostream> #include<string> #include<cstdio> using namespace std; int main() { int k,i,j; string str; while(cin>>str>>k) { for(i=0 ; i<str.length() ; i++ ) { for(j=0; j<=90; j++) { if((str[i]+26*j)%k==0&&('A'<=(str[i]+26*j)/k&&(str[i]+26*j)/k<='Z')) printf("%c",(str[i]+26*j)/k); } } cout<<endl; } return 0; }
-
输入包含多组数据,不超过1000组。