Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ Qt:大量的唯一随机变量64_C++_Qt_Random - Fatal编程技术网

C++ Qt:大量的唯一随机变量64

C++ Qt:大量的唯一随机变量64,c++,qt,random,C++,Qt,Random,我有以下情况:我想在1016和264-1之间生成M=500000个唯一的随机数。为了简化情况,我们可以假设,我们需要一个介于1和N=264-1之间的数字 我已经找到了对这个问题的引用,这里2^64-1是一个64位的数字。DES使用64位块大小。使用固定密钥加密数字0、1、2、3、4。。。在ECB模式下使用DES,您可以根据需要使用任意数量的数字。因为输入是唯一的,并且密钥是固定的,所以64位输出也保证是唯一的 如果64位数字> P>2 ^ 64 -1是64位数字。DES使用64位块大小。使用固定

我有以下情况:我想在1016和264-1之间生成M=500000个唯一的随机数。为了简化情况,我们可以假设,我们需要一个介于1和N=264-1之间的数字


我已经找到了对这个问题的引用,这里2^64-1是一个64位的数字。DES使用64位块大小。使用固定密钥加密数字0、1、2、3、4。。。在ECB模式下使用DES,您可以根据需要使用任意数量的数字。因为输入是唯一的,并且密钥是固定的,所以64位输出也保证是唯一的

如果64位数字<10^16,只需拒绝它并继续输入下一个整数即可。大约每1800个数字中就有1个(2^64/10^16)

如果您记录了密钥和最后使用的号码,您可以根据需要在列表中添加更多号码


我假设有一个C++ DES实现,可以从QT. ./P>> P>2 ^ 64 -1是64位数字。DES使用64位块大小。使用固定密钥加密数字0、1、2、3、4。。。在ECB模式下使用DES,您可以根据需要使用任意数量的数字。因为输入是唯一的,并且密钥是固定的,所以64位输出也保证是唯一的

如果64位数字<10^16,只需拒绝它并继续输入下一个整数即可。大约每1800个数字中就有1个(2^64/10^16)

如果您记录了密钥和最后使用的号码,您可以根据需要在列表中添加更多号码


我假设有一个C++ DES实现,可以从QT.< /P>运行,所以你的整个问题只是你的<代码> LangGrange<代码>函数是否正常?你不是在问如何组织庞大的数字列表并确保它们是唯一的吗?我们面临着同样的问题,即C运行时rand和qrand都不能生成高质量的随机集。这是用C++实现的,用C++处理。不需要额外的框架:@David:不,我想问两个问题。首先,有没有一种方法可以在没有2^64个标志的情况下运行O(M)?第二,我的longrand()对于该方法是否足够好,或者它是否会产生问题?为什么您希望数字在该特定范围内?您的问题似乎与通用唯一标识符有关,所以您的全部问题只是您的
longrand
函数是否正常?你不是在问如何组织庞大的数字列表并确保它们是唯一的吗?我们面临着同样的问题,即C运行时rand和qrand都不能生成高质量的随机集。这是用C++实现的,用C++处理。不需要额外的框架:@David:不,我想问两个问题。首先,有没有一种方法可以在没有2^64个标志的情况下运行O(M)?第二,我的longrand()对于该方法是否足够好,或者它是否会产生问题?为什么您希望数字在该特定范围内?您的问题似乎与通用唯一标识符有关,请参阅
quint64 MainWindow::longrand()
{
    quint64 erg=(quint64)qrand();
    for(int i=0;i<4;i++)
        erg=(erg<<(RAND_MAX+1))+qrand();
    erg=(erg<<16)+(qrand()%16);
    return erg;
}