最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java隨機(jī)數(shù)算法原理與實(shí)現(xiàn)方法實(shí)例詳解

 更新時間:2017年09月19日 09:45:27   作者:送人玫瑰手留余香  
這篇文章主要介紹了Java隨機(jī)數(shù)算法原理與實(shí)現(xiàn)方法,簡單分析了隨機(jī)數(shù)算法的原理并結(jié)合具體實(shí)例形式給出了java編程計算隨機(jī)數(shù)的具體操作技巧,需要的朋友可以參考下

本文實(shí)例講述了Java隨機(jī)數(shù)算法。分享給大家供大家參考,具體如下:

軟件實(shí)現(xiàn)的算法都是偽隨機(jī)算法,隨機(jī)種子一般是系統(tǒng)時間

在數(shù)論中,線性同余方程是最基本的同余方程,“線性”表示方程的未知數(shù)次數(shù)是一次,即形如:

ax≡b (mod n)的方程。此方程有解當(dāng)且僅當(dāng) b 能夠被 a 與 n 的最大公約數(shù)整除(記作 gcd(a,n) | b)。這時,如果 x0 是方程的一個解,那么所有的解可以表示為:

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

其中 d 是a 與 n 的最大公約數(shù)。在模 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。

純線性同余隨機(jī)數(shù)生成器

線性同余隨機(jī)數(shù)生成器介紹:

古老的LCG(linear congruential generator)代表了最好最樸素的偽隨機(jī)數(shù)產(chǎn)生器算法。主要原因是容易理解,容易實(shí)現(xiàn),而且速度快。

LCG 算法數(shù)學(xué)上基于公式:

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

其中,各系數(shù)為:

X(0)表示種子seed

模M, M > 0

系數(shù)A, 0 < A < M

增量C, 0 <= C < M

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

其中參數(shù)c, m, a比較敏感,或者說直接影響了偽隨機(jī)數(shù)產(chǎn)生的質(zhì)量。

一般來說我們采用M=(2^31)-1 = 2147483647,這個是一個31位的質(zhì)數(shù),A=48271,這個A能使M得到一個完全周期,這里C為奇數(shù),同時如果數(shù)據(jù)選擇不好的話,很有可能得到周期很短的隨機(jī)數(shù),例如,如果我們?nèi)eed=179424105的話,那么隨機(jī)數(shù)的周期為1,也就失去了隨機(jī)的意義。

(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);
 }
}

自己寫個簡單例子,隨機(jī)10萬次,隨機(jī)范圍0到9,看看是否均勻

相對來說還是挺均勻的

PS:這里再為大家提供幾款功能類似的在線工具供大家參考:

在線隨機(jī)數(shù)字/字符串生成工具:
http://tools.jb51.net/aideddesign/suijishu

在線隨機(jī)字符/隨機(jī)密碼生成工具:
http://tools.jb51.net/aideddesign/rnd_password

高強(qiáng)度密碼生成器:
http://tools.jb51.net/password/CreateStrongPassword

更多關(guān)于java算法相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《Java數(shù)據(jù)結(jié)構(gòu)與算法教程》、《Java字符與字符串操作技巧總結(jié)》、《Java操作DOM節(jié)點(diǎn)技巧總結(jié)》、《Java文件與目錄操作技巧匯總》和《Java緩存操作技巧匯總

希望本文所述對大家java程序設(shè)計有所幫助。

相關(guān)文章

最新評論

永宁县| 彰化县| 临安市| 桂阳县| 和顺县| 通城县| 普洱| 辛集市| 萨嘎县| 大宁县| 古丈县| 军事| 乌拉特前旗| 当雄县| 印江| 林州市| 穆棱市| 松原市| 瑞丽市| 乌苏市| 古浪县| 雅江县| 潮州市| 瑞安市| 紫阳县| 哈尔滨市| 长垣县| 福泉市| 五大连池市| 禄丰县| 连城县| 江津市| 汶上县| 乳山市| 廉江市| 平凉市| 彩票| 温泉县| 方山县| 乌拉特后旗| 工布江达县|