问题描述:RSA is one of the most powerful methods to encrypt data. The RSA algorithm is described as follow:
RSA是最强大的加密数据方法之一。RSA算法描述如下:
>选择两个大素数p,q
>计算n=p x q,计算F(n) = (p - 1) x (q - 1)
>选择一个整数e(1<e<F(n)),使最大公约数(e,F(n)) = 1,e是公开的
>计算d,使d x e mod F(n) = 1 mod F(n),d是私有的
你可以使用如下方法加密:
C = E(m) = me mod n
当你想要解密数据,用这个方法:
M = D(c) = cd mod n
这里的 c 是一封密文的一个整数ASCII值,m为纯文本字母的ASCII整数值
现在给定p,q,e和一些秘闻,你的任务是将密文翻译成普通文本。
输入:每个样例以四个整数p,q,e,l开头,跟着一行密文。p,q,e,l用32bit整数表示。密文包括l个整数,空格分开
#include <stdio.h>
#include <string.h>
#define N 10005
using namespace std;
__int64 fn;
__int64 power(int a,int d)
{
int i;
__int64 res=1;
for(i=1;i<=d;i++)
res=(res*a)%fn;
return res;
}
int main()
{
int d,i,j,p,q,e,l,a;
while(~scanf("%d%d%d%d",&p,&q,&e,&l))
{
fn = (p-1) * (q-1);
for(i=1;;i++)
if((i * e) % fn == 1)
break;
d = i; //i即为d
fn = p * q;
for(i = 0;i < l;i++)
{
scanf("%d",&a);
printf("%c",(power(a,d)));
}
putchar(10);
}
}