Псевдослучайные числа (метод середин квадратов) - C#
Формулировка задачи:
Имеется генератор псевдослучайных чисел, работающий по-принципу середин квадратов. Т.е. если есть на входе число 1111, то функция возводит число в квадрат получая 01234321 и выбирает из неё в качестве следующего x число 2343 (Сетка восьмиразрядная, если чисел менее 8 - дописываем нули слева) и далее возводит его в квадрат. Получается какая-то последовательность чисел 1111, 2343, .... Необходимо найти период повторения случайных чисел, т.е. узнать через сколько чисел будет повторение, хотя бы приблизительно. Подскажите идейку, как такую проверку можно реализовать? На ум приходит только использование массива из 10к элементов, но это мягко сказать слишком ресурсоемко
Решение задачи: «Псевдослучайные числа (метод середин квадратов)»
textual
Листинг программы
using System; using System.Linq; using System.Collections.Generic; class Program { public static void Main() { int[] neumann = Enumerable.Range(0, 10000).Select(i => (i * i) / 100 % 10000).ToArray(); int n; while (Int32.TryParse(Console.ReadLine(), out n) && n >= 0 && n < 10000) { HashSet<int> previous = new HashSet<int>(); int k = 0; do { k++; previous.Add(n); n = neumann[n]; } while (!previous.Contains(n)); Console.WriteLine(k); } } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д