指定した桁数の重複しないランダムな整数をすばやく生成

1492 ワード

50 W個の16ビットの重複しないランダム整数を迅速に生成
テストした結果、50 W個で1秒未満、500 Wで2秒程度、1000 W以上になるとメモリオーバーフローする可能性があります
            Random rnd = new Random();

            HashSet<long> hs = new HashSet<long>();

            for (int i = 0; i < 500000; i++)

            {

                long l = (long)((rnd.NextDouble() + rnd.Next(1, 9)) / 10 * 9999999999999999);

                if (!hs.Add(l))

                    i--;

            }

            Console.ReadLine();

 
生成を制御するための小数は0.1~0.999999の間である
(rnd.NextDouble() + rnd.Next(1, 9)) / 10