随机数生成算法

随机数生成算法

在这里插入代码片
class Random {
    int seed = time(NULL);
public:
    /**
     *
     * @return 随机整数,范围在0~Int之内
     */
    int randomInt() {
        int randNumber;
        srand(seed);
        randNumber = (int) (((double) rand() / RAND_MAX) * INT_MAX);
        seed = (seed + (int) (sqrt(seed) * sqrt(randNumber))) % (INT_MAX / 2);
        if (randNumber == 0) {
            seed = (int) (seed * 1.0001) % (INT_MAX / 2);
        }
//        if(seed == randNumber){
//            seed = (seed % (int)sqrt(INT_MAX))*(seed % (int)sqrt(INT_MAX));
//        } else{
//            seed = randNumber;
//        }
        return randNumber;
    }

    /**
     *
     * @param min 最小值边界
     * @param max 最大值边界
     * @return 返回一个指定范围内的随机数
     */
    int randomInt(int min, int max) {
        if (max < min) {
            cout << "sb" << endl;
            return -1;
        }
        int randNumber;
        srand(seed);
        randNumber = (int) (((double) rand() / RAND_MAX) * INT_MAX);
        seed = (seed + (int) (sqrt(seed) * sqrt(randNumber))) % (INT_MAX / 2);
        if (randNumber == 0) {
            seed = (int) (seed * 1.0001) % (INT_MAX / 2);
        }
        return randNumber % (max - min) + min;

    }
};

该算法避免了生成随机数的时候大量重复,范围在10w以内重复率可接受,我能接受,你不一定,如果有好的修改意见可以在评论区回复,谢谢带佬!

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值