全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

Java随机数算法原理与实现方法实例详解

本文实例讲述了Java随机数算法。分享给大家供大家参考,具体如下:

软件实现的算法都是伪随机算法,随机种子一般是系统时间

在数论中,线性同余方程是最基本的同余方程,“线性”表示方程的未知数次数是一次,即形如:

ax≡b (mod n)的方程。此方程有解当且仅当 b 能够被 a 与 n 的最大公约数整除(记作 gcd(a,n) | b)。这时,如果 x0 是方程的一个解,那么所有的解可以表示为:

{x0+kn/d|(k∈z)}

其中 d 是a 与 n 的最大公约数。在模 n 的完全剩余系 {0,1,…,n-1} 中,恰有 d 个解。

例子编辑

* 在方程 3x ≡ 2 (mod 6) 中, d = gcd(3,6) = 3 ,3 不整除 2,因此方程无解。

* 在方程 5x ≡ 2 (mod 6) 中, d = gcd(5,6) = 1,1 整除 2,因此方程在{0,1,2,3,4,5} 中恰有一个解: x=4。

* 在方程 4x ≡ 2 (mod 6) 中, d = gcd(4,6) = 2,2 整除 2,因此方程在{0,1,2,3,4,5} 中恰有两个解: x=2 and x=5。

纯线性同余随机数生成器

线性同余随机数生成器介绍:

古老的LCG(linear congruential generator)代表了最好最朴素的伪随机数产生器算法。主要原因是容易理解,容易实现,而且速度快。

LCG 算法数学上基于公式:

X(0)=seed;
X(n+1) = (A * X(n) + C) % M;

其中,各系数为:

X(0)表示种子seed

模M, M > 0

系数A, 0 < A < M

增量C, 0 <= C < M

原始值(种子) 0 <= X(0) < M

其中参数c, m, a比较敏感,或者说直接影响了伪随机数产生的质量。

一般来说我们采用M=(2^31)-1 = 2147483647,这个是一个31位的质数,A=48271,这个A能使M得到一个完全周期,这里C为奇数,同时如果数据选择不好的话,很有可能得到周期很短的随机数,例如,如果我们去Seed=179424105的话,那么随机数的周期为1,也就失去了随机的意义。

(48271*179424105+1)mod(2的31次方-1)=179424105

package test;
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.atomic.AtomicLong;
public class Random {
 public final AtomicLong seed=new AtomicLong();
 public final static long C = 1;
 public final static long A = 48271;
 public final static long M = (1L << 31) - 1;
 public Random(int seed){
  this.seed.set(seed);
 }
 public Random(){
  this.seed.set(System.nanoTime());
 }
 public long nextLong(){
  seed.set(System.nanoTime());
  return (A *seed.longValue() + C) % M;
 }
 public int nextInt(int number){
  return new Long( (A * System.nanoTime() + C) % number).intValue();
 }
 public static void main(String[] args) {
  System.out.println(new Random().nextLong());
  Map<Integer,Integer> map=new HashMap<Integer,Integer>();
  for(int i=0;i<100000;i++){
   int ran=new Random().nextInt(10);
   if(map.containsKey(ran)){
    map.put(ran, map.get(ran)+1);
   }else{
    map.put(ran, 1);
   }
  }
  System.out.println(map);
 }
}

自己写个简单例子,随机10万次,随机范围0到9,看看是否均匀

相对来说还是挺均匀的

PS:这里再为大家提供几款功能类似的在线工具供大家参考:

在线随机数字/字符串生成工具:
http://tools./aideddesign/suijishu

在线随机字符/随机密码生成工具:
http://tools./aideddesign/rnd_password

高强度密码生成器:
http://tools./password/CreateStrongPassword

更多关于java算法相关内容感兴趣的读者可查看本站专题:《Java数据结构与算法教程》、《Java字符与字符串操作技巧总结》、《Java操作DOM节点技巧总结》、《Java文件与目录操作技巧汇总》和《Java缓存操作技巧汇总》

希望本文所述对大家java程序设计有所帮助。


# Java  # 随机数  # 算法  # java随机数生产算法实例  # java生成抽样随机数的多种算法  # 史上最全的java随机数生成算法分享  # Java一个简单的红包生成算法  # Java排序算法之堆排思想及代码实现  # Java计算器核心算法代码实现  # Java利用递归算法实现查询斐波那契数  # Java垃圾回收之分代收集算法详解  # Java垃圾回收之标记压缩算法详解  # Java实现获取指定个数的不同随机数  # 操作技巧  # 产生器  # 都是  # 是一个  # 相关内容  # 也就  # 感兴趣  # 数据结构  # 给大家  # 主要原因  # 或者说  # 能使  # 速度快  # 更多关于  # 很有可能  # 所述  # 很短  # 几款  # 程序设计 


相关文章: 网站制作模板下载什么软件,ppt模板免费下载网站?  seo网站制作优化,网站SEO优化步骤有哪些?  网站制作和推广的区别,想自己建立一个网站做推广,有什么快捷方法马上做好一个网站?  深圳网站制作费用多少钱,读秀,深圳文献港这样的网站很多只提供网上试读,但有些人只要提供试读的文章就能全篇下载,这个是怎么弄的?  湖南网站制作公司,湖南上善若水科技有限公司做什么的?  图册素材网站设计制作软件,图册的导出方式有几种?  如何用低价快速搭建高质量网站?  Android自定义listview布局实现上拉加载下拉刷新功能  湖州网站制作公司有哪些,浙江中蓝新能源公司官网?  ppt制作免费网站有哪些,ppt模板免费下载网站?  大连 网站制作,大连天途有线官网?  如何设计高效校园网站?  全景视频制作网站有哪些,全景图怎么做成网页?  如何制作算命网站,怎么注册算命网站?  成都网站制作报价公司,成都工业用气开户费用?  成都响应式网站开发,dw怎么把手机适应页面变成网页?  建站之星如何助力企业快速打造五合一网站?  制作网站怎么制作,*游戏网站怎么搭建?  胶州企业网站制作公司,青岛石头网络科技有限公司怎么样?  如何用已有域名快速搭建网站?  建站之星安装路径如何正确选择及配置?  如何通过虚拟主机快速搭建个人网站?  如何快速登录WAP自助建站平台?  哪家制作企业网站好,开办像阿里巴巴那样的网络公司和网站要怎么做?  已有域名和空间如何搭建网站?  想学网站制作怎么学,建立一个网站要花费多少?  焦点电影公司作品,电影焦点结局是什么?  如何制作网站标识牌,动态网站如何制作(教程)?  建站IDE高效指南:快速搭建+SEO优化+自适应模板全解析  深入理解Android中的xmlns:tools属性  建站之星展会模板:智能建站与自助搭建高效解决方案  网站制作软件免费下载安装,有哪些免费下载的软件网站?  建站ABC备案流程中有哪些关键注意事项?  网站制作软件有哪些,制图软件有哪些?  建站之星如何快速解决建站难题?  建站之星如何取消后台验证码生成?  如何通过FTP服务器快速搭建网站?  如何用手机制作网站和网页,手机移动端的网站能制作成中英双语的吗?  网站图片在线制作软件,怎么在图片上做链接?  完全自定义免费建站平台:主题模板在线生成一站式服务  存储型VPS适合搭建中小型网站吗?  如何在云虚拟主机上快速搭建个人网站?  如何在橙子建站上传落地页?操作指南详解  平台云上自主建站:模板化设计与智能工具打造高效网站  宝塔建站后网页无法访问如何解决?  家庭建站与云服务器建站,如何选择更优?  专业网站制作企业网站,如何制作一个企业网站,建设网站的基本步骤有哪些?  开心动漫网站制作软件下载,十分开心动画为何停播?  佛山企业网站制作公司有哪些,沟通100网上服务官网?  如何通过万网虚拟主机快速搭建网站? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。