NYOJ770-仿射密码

xiaoxiao2021-02-28  19

仿射密码

时间限制: 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算才对
转载请注明原文地址: https://www.6miu.com/read-2800037.html

最新回复(0)