仿射密码
时间限制:
1000 ms | 内存限制:
65535 KB
难度:
1
描述
仿射密码是替换密码的另一个特例,可以看做是移位密码和乘数密码的结合。其加密变换如下:
E(m)=(k1*m+k2) mod q;(其中k1,k2为密钥,且0<k1,k2<q。k1和q是互素的)。
现已知一经过仿射加密的密文和密钥,请破译出它的明文。
输入
输入包含不超过1000组数据;
每组数据包含一个由大写字母组成的字符串和两个正整数k1,k2,字符串长度不超过50,0<k1,k2<q。
输出
每组输出占一行,输出对应的明文。
样例输入
ILOVEYOU 3 2
样例输出
CDEPSQEG
#include<stdio.h>
int main()
{
char str[50];
int j,q,k1,k2;
while(scanf("%s %d %d",str,&k1,&k2)!=EOF)
{
for(j=0;str[j]!='\0';j++)
{
int c;
for(c=0;c<=26;c++)
if(str[j]==(k1*c+k2)&+'A')
{
str[j]=c+'A';
break;
}
}
printf("%s\n",str);
}
return 0;
}
//有毛病,q按26算才对