乘数密码
时间限制:
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<stdio.h>
int main()
{
char str[50];
int j,q,k;
while(scanf("%s %d",str,&k)!=EOF)
{
for(j=0;str[j]!='\0';j++)
{
char c;
for(c='A';c<='A'+26;c++)
if(str[j]==k*(c-'A')&+'A')
{
str[j]=c;
break;
}
}
printf("%s\n",str);
}
return 0;
}