fork download
  1. #include <iostream>
  2. #include <fstream>
  3. #include <vector>
  4. #include <chrono>
  5.  
  6. using namespace std;
  7.  
  8. // Лінійний конгруентний метод
  9. class LCG {
  10. private:
  11. unsigned long long a, c, m, seed;
  12.  
  13. public:
  14. LCG(unsigned long long a, unsigned long long c, unsigned long long m, unsigned long long seed)
  15. : a(a), c(c), m(m), seed(seed) {}
  16.  
  17. unsigned long long next() {
  18. seed = (a * seed + c) % m;
  19. return seed;
  20. }
  21. };
  22.  
  23. // Функція для генерації та запису випадкових чисел у файл
  24. void generateNumbers(const string& filename, LCG& generator, int count) {
  25. ofstream outFile(filename);
  26. if (!outFile) {
  27. cerr << "Помилка відкриття файлу!" << endl;
  28. return;
  29. }
  30.  
  31. for (int i = 0; i < count; i++) {
  32. outFile << generator.next() << endl;
  33. }
  34.  
  35. outFile.close();
  36. cout << "Числа успішно збережені у файлі: " << filename << endl;
  37. }
  38.  
  39. // Функція для вимірювання часу виконання генерації
  40. void testPerformance(LCG& generator, int count) {
  41. auto start = chrono::high_resolution_clock::now();
  42.  
  43. for (int i = 0; i < count; i++) {
  44. generator.next();
  45. }
  46.  
  47. auto end = chrono::high_resolution_clock::now();
  48. chrono::duration<double> duration = end - start;
  49.  
  50. cout << "Час генерації " << count << " чисел: " << duration.count() << " секунд" << endl;
  51. }
  52.  
  53. int main() {
  54. // Параметри для LCG: стандартні значення (GNU GCC LCG)
  55. unsigned long long a = 1664525;
  56. unsigned long long c = 1013904223;
  57. unsigned long long m = 4294967296; // 2^32
  58. unsigned long long seed = 12345; // Початкове значення
  59.  
  60. LCG generator(a, c, m, seed);
  61.  
  62. int numSamples = 10000; // Кількість випадкових чисел
  63.  
  64. // Генерація випадкових чисел і запис у файл
  65. generateNumbers("random_numbers.txt", generator, numSamples);
  66.  
  67. // Тестування продуктивності
  68. testPerformance(generator, numSamples);
  69.  
  70. return 0;
  71. }
  72.  
Success #stdin #stdout #stderr 0.01s 5284KB
stdin
Standard input is empty
stdout
Час генерації 10000 чисел: 0.000119502 секунд
stderr
Помилка відкриття файлу!