生成2 ^ 30的随机数

joh*_*ohn 5 c c++ java

我想生成2^300到2 ^ 10范围内的随机数.我听说这个rand()函数不适合这么多的数字.有没有其他方法可以用几乎相等的分布生成它?

yey*_*eyo 1

g_random_int() 返回在 [0..2^32-1] 范围内均匀分布的随机 guint32。

#include <glib.h>

int
main(void)
{
     g_print("%d\n", g_random_int());
   return 0;
}
Run Code Online (Sandbox Code Playgroud)

与海湾合作委员会:

gcc -o rand rand.c `pkg-config --cflags --libs glib-2.0`
Run Code Online (Sandbox Code Playgroud)

编辑:

直接从 /dev/random 读取(不太便携),照常编译:

#include <stdio.h>
#include <sys/types.h>
#include <fcntl.h>
#include <unistd.h>

int
main(void)
{
    int             fd;
    unsigned int    number;

    fd = open("/dev/random", O_RDONLY);

    read(fd, &number, sizeof(number));

    printf("%u\n", number);
    close(fd);
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

PS:检查是否有错误。