梅森算法生成随机数的Python实现

import time
class Util(object):    def __init__(self):        self.index = 624        self.MT = [0] * 624  
  def inter(self,t):      return (0xFFFFFFFF & t)  # 取最后32位->t

  def twister(self):      for i in range(self.index):          y = self.inter((self.MT[i] & 0x80000000) + (self.MT[(i + 1) % self.index] & 0x7fffffff))          self.MT[i] = self.MT[(i + 397) % self.index] ^ y >> 1          if y % 2 != 0:             self.MT[i] = self.MT[i] ^ 0x9908b0df      self.index = 0

  def exnum(self):     if self.index >= 624:        self.twister()      y = self.MT[self.index]      y = y ^ y >> 11      y = y ^ y << 7 & 2636928640      y = y ^ y << 15 & 4022730752      y = y ^ y >> 18      self.index = self.index + 1      return self.inter(y)

  def mainset(self,seed):     self.MT[0] = seed  # seed     for i in range(1, self.index):        self.MT[i] = self.inter(1812433253 * (self.MT[i - 1] ^ self.MT[i - 1] >> 30) + i)      return self.exnum()

  def randomint(self,min_num,max_num):      try:         so = float(self.mainset(int(time.time()))) / (2 ** 32 - 1)         rd = min_num + int((max_num - min_num) * so)         return rd      except Exception as ex:         print "randomint function excute exception:" + str(ex)

原文地址:https://www.cnblogs.com/chmyee/p/9924195.html

时间: 2024-11-10 07:34:27

梅森算法生成随机数的Python实现的相关文章

Java中生成随机数Random、ThreadLocalRandom、SecureRandom、Ma

我们来说说Java常见的生成随机数的几种方式:Random,ThreadLocalRandom,SecureRandom;其实产生随机数有很多种方式但我们常见的就这几种,如果需要详细了解这个三个类,可以查看JAVA API. Random random = new Random(); int a = random.nextInt(5);//随机生成0~4中间的数字 其实Random是有构造函数的,他的参数可以传一个long类型的值,当使用空的构造的时候,使用的实际上是System.nanoTim

算法学习与代码实现1——开始、生成随机数

开端 作为一个非科班出身的程序猿,算法始终是个软肋.之前倒也抽时间断断续续看了点算法的书,但基本过目即忘,可能每个算法都实际实现以下,编写下练习代码才能更好的学习.于是在github上创建了一个仓库,用来一个个实现算法.置于语言的选择,都说语言不过是工具,算法才是核心,那么就多用几种语言来实现吧.其实我会的语言也不多,c/c++可能还好,再就是个初学者阶段的Python,在实现算法的过程中,也能练习下这些语言的使用,一箭双雕呀,哈哈,有点小激动呢. github上的仓库地址如下: [email 

【python】【转】Python生成随机数的方法

如果你对在Python生成随机数与random模块中最常用的几个函数的关系与不懂之处,下面的文章就是对Python生成随机数与random模块中最常用的几个函数的关系,希望你会有所收获,以下就是这篇文章的介绍.random.random()用于生成用于生成一个指定范围内的随机符点数,两个参数其中一个是上限,一个是下限.如果a > b,则生成随机数n: a <= n <= b.如果 a <b, 则 b <= n <= a.print random.uniform(10,

Python:time模块&amp;序列化&amp;md5&amp;生成随机数&amp;反射

time模块:>>> import time >>> time.time <built-in function time> >>> time.time() 1473837803.320634 >>> time.localtime() time.struct_time(tm_year=2016, tm_mon=9, tm_mday=14, tm_hour=15, tm_min=23, tm_sec=58, tm_wday=2

【转载】python 模块 - random生成随机数模块

http://blog.csdn.net/pipisorry/article/details/39086463 随机数种子 要每次产生随机数相同就要设置种子,相同种子数的Random对象,相同次数生成的随机数字是完全相同的: random.seed(1) 这样random.randint(0,6, (4,5))每次都产生一样的4*5的随机矩阵 关于种子的介绍可参见[Java - 常用函数Random函数] Python标准库random模块 (生成随机数模块) random.random() r

运用简单的bloomfilter算法生成100万个不重复的随机数

本文中只是简单的体会bloomFilter算法的基本原理,设计实现一个生成100万个不重复的随机数. 选择3个分布均匀质数,在这里面质数的选择还是挺有讲究的,要注意不能太小,必须能够满足bloomfilter空间,不然整个空间都是1了还没有找到100万个不重复的随机数.不多说,上代码. #include<stdio.h> #include<stdlib.h> #include<time.h> #include<cstdbool> #define MAXNUM

python 生成随机数

import random import string import time from datetime import date,timedelta class randoms(): # 获取26个大小写字母 letters = string.ascii_letters # 获取26个小写字母 Lowercase_letters = string.ascii_lowercase # 获取26个大写字母 Capital = string.ascii_uppercase # 获取阿拉伯数字 dig

python生成随机数:uniform(), randint(), gauss(), expovariate()

目录 22.python生成随机数:uniform(), randint(), gauss(), expovariate() 22.1 模块:random内建模块,伪随机数生成器 22.2 播种随机数,即用随机数种子seed控制随机数 22.3 在已知的范围内生成随机数,例如[2, 5],那就可以random.random()*3 + 2, uniform(2,5), randint(2,5) 22.4 从列表中随机选择一个值:choice(), choices() 22.5 shuffling

算法生成指定数目的随机数

package text; import java.util.Scanner; public class random { public static void main(String[] args) { int a=13, b=35,m=87,Xo=19; int z=Xo; System.out.print("请输入生成随机数的个数:"); Scanner cin1=new Scanner(System.in); int j=cin1.nextInt(); int q=0; for