fork download
  1. #include <stdio.h>
  2. #include <assert.h>
  3. #include <stdlib.h>
  4. #include <vector>
  5.  
  6. static FILE *fr, *fw;
  7.  
  8. // Declaring variables
  9. static int N;
  10. static int d;
  11. static int L;
  12. static int* messaggio;
  13. static char* plaintext;
  14.  
  15. // Declaring functions
  16.  
  17. int fast_pow(int base, int esp, int modd) {
  18. if (esp == 0) return 1;
  19. if (esp == 1) return base % modd;
  20. int meta = fast_pow(base, esp / 2, modd);
  21. if (esp % 2 == 0) return (meta * meta) % modd;
  22. else return (meta * meta % modd * base) % modd;
  23. }
  24.  
  25. void decifra(int N, int d, int L, int* messaggio, char* plaintext) {
  26.  
  27. plaintext[L] = char(0);
  28. for (int i = 0; i < L; i++) {
  29. plaintext[i] = char(fast_pow(messaggio[i], d, N));
  30.  
  31. }
  32. }
  33.  
  34. int main() {
  35. fr = stdin;
  36. fw = stdout;
  37.  
  38. // Iterators used in for loops
  39. int i0;
  40.  
  41. // Reading input
  42. fscanf(fr, "%d %d %d", &N, &d, &L);
  43. messaggio = (int*)malloc(100 * sizeof(int));
  44. plaintext = (char*)malloc(110 * sizeof(char));
  45. for (i0 = 0; i0 < L; i0++)
  46. fscanf(fr, "%d", &messaggio[i0]);
  47.  
  48. // Calling functions
  49. decifra(N, d, L, messaggio, plaintext);
  50.  
  51. // Writing output
  52. fprintf(fw, "%s\n", plaintext);
  53.  
  54. fclose(fr);
  55. fclose(fw);
  56. return 0;
  57. }
  58.  
Success #stdin #stdout 0s 5320KB
stdin
391 3 3
295 123 129
stdout
abc