fork download
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. long long P, Q, E, D;
  5.  
  6. long long ExtendedGCD(long long A, long long B, long long *C, long long *D)
  7. {
  8. long long I;
  9. long long J;
  10. if (A%B == 0)
  11. {
  12. (*C) = 0;
  13. (*D) = 1;
  14. return B;
  15. }
  16. else
  17. {
  18. I = ExtendedGCD(B, A%B, C, D);
  19. J = (*C);
  20. (*C) = (*D);
  21. (*D) = (*D)*(-A / B) + J;
  22. return I;
  23. }
  24. }
  25.  
  26. void GenerateKeys()
  27. {
  28. long long I, J;
  29. P = 944659;
  30. P = 10007;
  31. Q = 817907;
  32. Q = 10009;
  33. E = 65537;
  34. ExtendedGCD((P - 1)*(Q - 1), E, &I, &J);
  35. while (J <= 0)
  36. J += (P - 1)*(Q - 1);
  37. D = J;
  38. }
  39.  
  40. long long ExponentBySquaring(long long V, long long Exp)
  41. {
  42. long long I;
  43. if (Exp == 0)
  44. {
  45. return 1;
  46. }
  47. else if (Exp == 1)
  48. {
  49. return V % (P*Q);
  50. }
  51. else
  52. {
  53. if (Exp % 2 == 0)
  54. {
  55. I = ExponentBySquaring(V, Exp / 2);
  56. I = ((I % (P*Q)) * (I % (P*Q))) % (P*Q);
  57. }
  58. else
  59. {
  60. I = ExponentBySquaring(V, Exp / 2);
  61. I = ((((I % (P*Q)) * (I % (P*Q))) % (P*Q))*(V % (P*Q))) % (P * Q);
  62. }
  63. return I % (P*Q);
  64. }
  65. }
  66.  
  67.  
  68.  
  69. long long MyEncrypt(long long M)
  70. {
  71. return ExponentBySquaring(M, E);
  72. }
  73.  
  74. long long MyDecrypt(long long C)
  75. {
  76. return ExponentBySquaring(C, D);
  77. }
  78.  
  79. int main()
  80. {
  81. GenerateKeys();
  82. printf("%lld\n", MyDecrypt(MyEncrypt(65)));
  83. while (getchar() != 'q')
  84. {
  85.  
  86. }
  87. return 0;
  88. }
  89.  
Time limit exceeded #stdin #stdout 5s 3348KB
stdin
Standard input is empty
stdout
Standard output is empty