亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Java中實現隨機數算法的原理是什么

發布時間:2020-12-05 16:10:15 來源:億速云 閱讀:213 作者:Leah 欄目:編程語言

本篇文章為大家展示了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,看看是否均勻

Java中實現隨機數算法的原理是什么

上述內容就是Java中實現隨機數算法的原理是什么,你們學到知識或技能了嗎?如果還想學到更多技能或者豐富自己的知識儲備,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

福州市| 广州市| 丰宁| 壤塘县| 永州市| 特克斯县| 鄂托克旗| 黄冈市| 凌云县| 德化县| 页游| 屏东县| 墨脱县| 乌兰察布市| 屯留县| 鄯善县| 渑池县| 齐齐哈尔市| 景谷| 德州市| 黎城县| 三原县| 汝南县| 涿州市| 临桂县| 高雄县| 新野县| 石屏县| 新巴尔虎左旗| 大兴区| 普兰店市| 绥江县| 资阳市| 定边县| 车险| 江华| 张家口市| 武邑县| 汉沽区| 东城区| 渭源县|