随机生成可被N整除的数字的最佳算法

use*_*747 3 c c++ algorithm

有没有更好的算法来做以下事情?

我试图生成50个可被7整除的随机数.然后我随机选择其中一个并返回该数字.

是否有更有效/更好的方法来随机生成可被7整除的数字?有没有更好的方法来编码/执行此操作?

    unsigned int generateRandomNumberDivisibleByN( unsigned int n, unsigned int num=10 )
    {
        // Post: Generate many different random numbers that are divisible by n, then randomly select one of
        //       of those numbers to return.

        unsigned int potentialNums[num];

        for (int i=0, j=2; i<num; i++, j=rand()%INT_MAX)
        {
            potentialNums[i] = j*n;
        }

        return potentialNums[ rand()%num ]; // should this be rand()%(num-1) so it never returns an invalid array index?
    }
Run Code Online (Sandbox Code Playgroud)

Mys*_*ial 13

为什么你不能这样做?

return (rand() % MAX) * 7;
Run Code Online (Sandbox Code Playgroud)

它几乎完全相同.

哪里MAX小到足以避免在乘法7期间溢出.您可以定义为:

const MAX = INT_MAX / 7;
Run Code Online (Sandbox Code Playgroud)

或者如果你想要它快,你可以做类似的事情:

return (rand() & 0xff) * 7;
Run Code Online (Sandbox Code Playgroud)


K-b*_*llo 5

随机生成一个可被7整除的数字的最有效方法是生成一个随机数,然后乘以7.

return ( rand() % ( INT_MAX / 7 ) ) * 7
Run Code Online (Sandbox Code Playgroud)