Advertisement
Yanislav29

Untitled

Dec 29th, 2019
106
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.24 KB | None | 0 0
  1. void fastPow_1variant(int num,int MOD,int m) {//изпълнение на задача 9
  2.  
  3. cout << "Variant 1:" << endl;
  4. int c = 0;//променливав която ще извършваме степенуване на всяка итерация на цикъла
  5. int k = 0;
  6. int b = num;//запазваме стойноста на въведеното число
  7. int tmp = 0;//тук ще пазим стойноста на m % k
  8. for (int i = 2;i < MOD;i++) {
  9.  
  10. if (i & 1)
  11.  
  12.  
  13. b = ((long long)b * b) % MOD;
  14. c = pow(num, i);
  15. cout << num << "^" << i << " =" << num << "*" << num << "^" << i - 1 << "mod(" << MOD << ")" << c % MOD << endl;
  16.  
  17. if (c % MOD == 1) {
  18. k = i;
  19. tmp = m % k;
  20. int result = pow(num, tmp);
  21. cout << "The smallest integer,which a^k mod(n) = 1 ,k = " << " " << i << endl;
  22. cout << num << "^" << m << " = " << MOD << " " << num << "^" << m << "mod(" << k << ") =" << MOD << " " << num << "^" << tmp << "=" << MOD << " "<< result % MOD;
  23. break;
  24. }
  25. }
  26. // cout << num << "^" << m << " = " << MOD;
  27. }
  28. void fastPow_2variant(int num, int MOD,int m) {//изпълнение на задача 10
  29. cout << "Variant 2:" << endl;
  30. int c = 0;//променливав която ще извършваме степенуване на всяка итерация на цикъла
  31.  
  32. int b = num;//запазваме стойноста на въведеното число num
  33. int tmp = 0;// променлива в която ще съхраним (c % MOD)
  34. int res = 0;
  35. for (int i = 2;i < m;i*= 2) {
  36.  
  37. if (i & 1)
  38.  
  39.  
  40. b = ((long long)b * b) % MOD;
  41. c = pow(num, i);
  42.  
  43.  
  44. if (i == 2)
  45. cout << num << "^" << i << " =" << "(" << num << "^" << i / 2 << ")" "^" << 2 << "mod(" << MOD << ")" << " " << c % MOD << endl;
  46.  
  47. else {
  48. if (i > 2) {
  49. c = pow(num, i / 2);
  50. tmp = abs(c % MOD);
  51. res = pow(tmp, 2);
  52. cout << num << "^" << i << " =" << "(" << num << "^" << i / 2 << ")" "^" << 2 << "mod(" << MOD << ")" << " " << tmp << "^" << 2 << "mod(" << MOD << ")" << res % MOD << endl;
  53. }
  54.  
  55. }
  56. }
  57.  
  58. cout << endl;
  59.  
  60. cout << num << "^" << m << "=" << num << "^64 + 32 + 4 =" << MOD << " " << 4 << "*" << 2 << "*" << 4 << "mod(" << MOD << ")" << " " << (4*2*4) % MOD;
  61. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement