HDU1211 RSA
来源:互联网 发布:网络售药全面叫停 编辑:程序博客网 时间:2024/05/18 09:16
RSA
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 1415 Accepted Submission(s): 1017
Problem Description
RSA is one of the most powerful methods to encrypt data. The RSA algorithm is described as follow:
> choose two large prime integer p, q
> calculate n = p × q, calculate F(n) = (p - 1) × (q - 1)
> choose an integer e(1 < e < F(n)), making gcd(e, F(n)) = 1, e will be the public key
> calculate d, making d × e mod F(n) = 1 mod F(n), and d will be the private key
You can encrypt data with this method :
C = E(m) = me mod n
When you want to decrypt data, use this method :
M = D(c) = cd mod n
Here, c is an integer ASCII value of a letter of cryptograph and m is an integer ASCII value of a letter of plain text.
Now given p, q, e and some cryptograph, your task is to "translate" the cryptograph into plain text.
> choose two large prime integer p, q
> calculate n = p × q, calculate F(n) = (p - 1) × (q - 1)
> choose an integer e(1 < e < F(n)), making gcd(e, F(n)) = 1, e will be the public key
> calculate d, making d × e mod F(n) = 1 mod F(n), and d will be the private key
You can encrypt data with this method :
C = E(m) = me mod n
When you want to decrypt data, use this method :
M = D(c) = cd mod n
Here, c is an integer ASCII value of a letter of cryptograph and m is an integer ASCII value of a letter of plain text.
Now given p, q, e and some cryptograph, your task is to "translate" the cryptograph into plain text.
Input
Each case will begin with four integers p, q, e, l followed by a line of cryptograph. The integers p, q, e, l will be in the range of 32-bit integer. The cryptograph consists of l integers separated by blanks.
Output
For each case, output the plain text in a single line. You may assume that the correct result of plain text are visual ASCII letters, you should output them as visualable letters with no blank between them.
Sample Input
101 103 7 117716 7746 7497 126 8486 4708 7746 623 7298 7357 3239
Sample Output
I-LOVE-ACM.
1和l傻傻分不清。
//hdu1211#include <stdio.h>typedef __int64 lld;lld f(lld c, lld d, lld n){ if(d == 0) return 1 % n; if(d == 1) return c % n; lld tmp = f(c, d >> 1, n); tmp = tmp * tmp % n; if(d & 1) tmp = tmp * c % n; return tmp;}int main(){ lld p, q, e, l, c, n, fn, d, i; char ch; while(scanf("%I64d%I64d%I64d%I64d", &p, &q, &e, &l) != EOF){ n = p * q; fn = (p - 1) * (q - 1); for(i = 1; ; ++i) if(i * e % fn == 1) break; d = i; while(l--){ scanf("%I64d", &c); printf("%c", f(c, d, n)); } printf("\n"); } return 0;}
0 0
- HDU1211 RSA
- RSA HDU1211
- HDU1211 RSA 基础
- HDU1211 RSA【公匙密码】
- HDU1211
- hdu1211
- hdu1211
- hdu1211
- hdu1211(RSA)(扩展欧几里得+快速幂+快速乘)
- RSA
- RSA
- RSA
- RSA
- RSA
- rsa
- rsa
- RSA
- RSA
- 智能家居无创新,不智能
- 程序员和特种兵 几分相似几分无奈
- 常用的C#正则表达式!
- asdf
- 隐马尔可夫模型(HMM)攻略
- HDU1211 RSA
- 【leetcode】Binary Tree Postorder Traversal
- Cpp拾零(to be continued)
- 如何做一名优秀的团队领导?LinkedIn CEO给出的3条建议
- 启用Oracle 11g中的Apex
- 算法的封装与切换——策略模式
- poj1014+hdu1059--A - Dividing(多重背包,二进制优化)
- 如何“玩”微信
- 详解 Linux cp命令