fork download
  1. program rsa;
  2. const MaxL=100;
  3. var N, d, L , i:int64;
  4. messaggio : array [0..maxL] of int64;
  5. plaintext : array [0..maxL] of char;
  6.  
  7.  
  8.  
  9. function fast_pow (base:int64; esp:int64; modd:int64) :int64;
  10. var meta :int64;
  11. begin
  12. if esp = 0 then fast_pow:=1
  13. else
  14. if esp = 1 then fast_pow:= base mod modd
  15. else
  16. begin
  17. meta := fast_pow(base, esp div 2, modd);
  18. if esp mod 2 =0 then fast_pow:= (meta*meta) mod modd
  19. else fast_pow:= (meta*meta * base) mod modd;
  20. end;
  21. end;
  22. procedure decifra (N :int64; d:int64;L:int64; var messaggio :array of int64 ;plaintext:array of char);
  23. var i:int64;
  24. begin
  25. plaintext[L]:=char(0);
  26. for i:=0 to L-1 do begin plaintext[i]:=char(fast_pow(messaggio[i], d, N));write(plaintext[i]); end;
  27. end;
  28.  
  29.  
  30. begin
  31. readln (N,d,L);
  32. for i:=0 to L-1 do read(messaggio[i]);readln;
  33. decifra(N,d,L,messaggio,plaintext);
  34.  
  35.  
  36. end.
  37.  
Success #stdin #stdout 0s 5272KB
stdin
391 3 3
295 123 129
stdout
abc