fork download
  1. ///************************************
  2. ///Kryptografia 5 *********************
  3. ///************************************
  4.  
  5. #include <iostream>
  6. #include <cmath>
  7. #include <vector>
  8. #include <ctime>
  9. #include <cstdlib>
  10.  
  11. using namespace std;
  12.  
  13. unsigned long long *tab;
  14.  
  15. //rozklad na czynniki pierwsze (faktoryzacja)
  16. void rozklad_Fermata(unsigned int k)
  17. {
  18. unsigned long x, y, r, u, n;
  19. x = (unsigned long)(sqrt(k));
  20. do
  21. {
  22. r = x * x - k;
  23. y = (unsigned long)floor(sqrt(r));
  24. if (r == y * y)
  25. {
  26. u = x + y;
  27. n = x - y;
  28. if (n == 1)
  29. break;
  30. rozklad_Fermata(u);
  31. rozklad_Fermata(n);
  32. return;
  33. }
  34. x++;
  35. } while (x + y < k);
  36. // cout << k << "\n";
  37. tab[k]++;
  38. }
  39.  
  40. int potegowanie_modulo(int a, int b, int m) //funkcja sprawdzania czy liczba jest pierwasza
  41. {
  42. int i, result = 1;
  43. long int x = a % m;
  44. for (i = 1; i <= b; i <<= 1)
  45. {
  46. x %= m;
  47. if ((b & i) != 0)
  48. {
  49. result *= x;
  50. result %= m;
  51. }
  52. x *= x;
  53. }
  54. return result % m;
  55. }
  56.  
  57. int main(void)
  58. {
  59. unsigned long long number, j, a, k;
  60. bool czy_pierwsza = true;
  61. tab = new unsigned long long[number]; //przydzielenie nowego bloku pamieci dla tablicy
  62.  
  63.  
  64. cout << "Podaj liczbe do sprawdzenia: ";
  65. cin >> number;
  66.  
  67. for (j = 0; j < number; j++) {
  68. tab[j] = 0;
  69. }
  70. k = number - 1;
  71.  
  72. ////// dopoki reszta z dzielenia przez 2 jest rowna 0 ////////////
  73. while (k % 2 == 0)
  74. {
  75. k >>= 1;
  76. tab[2]++;
  77. }
  78.  
  79. if (k > 1)
  80. rozklad_Fermata(k);
  81.  
  82. /////////// potegi /////////////////////
  83. cout << "Nasze potegi to: \n";
  84. for (j = 0; j < number; j++)
  85. {
  86. if (tab[j] > 0)
  87. {
  88. cout << j << "^" << tab[j] << endl;
  89. }
  90. }
  91.  
  92. /////////////// dziekniki ///////////
  93. cout << "Nasze dzielniki to: \n";
  94. for (j = 0; j < number; j++)
  95. {
  96. if (tab[j] > 0)
  97. {
  98. cout << j << endl;
  99. }
  100. }
  101.  
  102. /////// krotnosci ////////////////
  103. cout << "Nasze krotnosci to: \n";
  104. for (j = 0; j < number; j++) {
  105. if (tab[j] > 0)
  106. {
  107. cout << tab[j] << endl;
  108. }
  109. }
  110.  
  111. /* cout << "Podaj cyfre lub liczbe z przedzialu <2," << number - 1 << ">" << endl;
  112. cin >> a;
  113.  
  114. //sprawdzenie pierwszosci
  115. if (potegowanie_modulo(a, number - 1, number) != 1)
  116. czy_pierwsza = false;
  117.  
  118. for (j = 0; j < k; j++)
  119. {
  120. if (tab[j] > 0)
  121. {
  122. unsigned long long x = potegowanie_modulo(a, (number - 1) / j, number);
  123.  
  124. cout << j << endl;
  125.  
  126. if (potegowanie_modulo(a, (number - 1) / j, number) == 1)
  127. czy_pierwsza = false;
  128. }
  129. }
  130.  
  131. if (czy_pierwsza == true)
  132. {
  133. cout << "Liczba " << number << " jest pierwsza." << endl;
  134. }
  135. else
  136. {
  137. cout << "Liczba " << number << " jest zlozona." << endl;
  138. }
  139.  
  140. */
  141. system("pause");
  142. return 0;
  143. }
Runtime error #stdin #stdout 0s 3476KB
stdin
Standard input is empty
stdout
Podaj liczbe do sprawdzenia: