
        /// <summary>
        /// lowからhighまでの乱数をm個重複せずランダムに選ぶ
        /// </summary>
        /// <param name="device"></param>
        /// <param name="count"></param>
        /// <param name="low"></param>
        /// <param name="high"></param>
        /// <returns></returns>
        // 最悪時間を見積もらない適当な実装
        private int[] GenerateRandomSampling(Random device, int count, int low, int high)
        {
            if (count <= high - low + 1 || count <= 0) throw new ArgumentOutOfRangeException();

            int[] result = new int[count];
            int ptr = 0;
            while (ptr < count)
            {
                int r = device.Next(low, high);
                bool accept = true;
                for (int i = 0; i < ptr; ++i)
                    accept &= result[i] != r;
                if (accept)
                    result[ptr++] = r;
            }
            return result;
        }