b2科目四模拟试题多少题驾考考爆了怎么补救
b2科目四模拟试题多少题 驾考考爆了怎么补救

Java随机数算法原理和实现方法示例的详细说明

电脑杂谈  发布时间:2020-04-23 06:26:06  来源:网络整理

水仙花数算法_随机数生成算法_短链接生成还原算法

软件实现的算法均为伪随机算法,随机一般为系统时间

在数论中,线性同余方程是最基本的同余方程. “线性”表示方程的未知次数为1次,如下所示:

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和x = 5.

纯线性同余随机数

线性同余随机数简介:

古老的LCG(线性同余)代表最好和最简单的伪随机数算法. 主要原因是它易于理解,易于实现且速度很快.

随机数生成算法_水仙花数算法_短链接生成还原算法

LCG算法在数学上基于以下公式:

X(0)=;

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

系数为:

X(0)表示

ģM,M> 0

随机数生成算法_短链接生成还原算法_水仙花数算法

系数A,0

增量C,0 <= C

原始值()0 <= X(0)

参数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);
 }
}

自己写一个简单的例子随机数生成算法,随机100,000次,随机范围0到9,看是否均匀

相对而言,它很统一

PS: 以下是一些具有相似功能的工具,供您参考:

随机数/字符串生成工具:

随机字符/随机密码生成工具:

高强度密码:

更多对Java算法相关内容感兴趣的读者可以查看此站点的主题: “ Java数据结构和算法教程”,“ Java字符和字符串操作技巧摘要”,“ Java操作DOM节点技巧摘要”,Java文件和目录操作技巧摘要“和“ Java缓存操作技巧摘要”

我希望本文对Java编程的每个人都有帮助.


本文来自
电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-185650-1.html

    相关阅读
      发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

      热点图片
      拼命载入中...