描述
乘数密码也是一种替换密码,其加密变换是将明文字母串逐位乘以密钥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<algorithm>
#include<cstdio>
#include<string.h>
using namespace std;
int x,y,q;
void ex_Eulid(int a,int b)
{
if(b==0)
{
x=1;
y=0;
q=a;
}
else
{
ex_Eulid(b,a%b);
double temp=x;
x=y;
y=temp-a/b*y;
}
}
int main()
{
int a,b;
char str[51];
while(~scanf("%s",str))
{
scanf("%d",&a);
b=26;
int len=strlen(str);
ex_Eulid(a,b);
for(int i=0;i<len;i++)
{
str[i]=(str[i]-65)*(x+26)%26+65;
printf("%c",str[i]);
}
printf("\n");
}
return 0;
}