利用线性公式,得到随机数

一.设计思想

1.公式中的各项数值,其中取得mod尽可能大

2.输入要进行计算的数值长度

3.输入一个种子

4.校验数值

5.调用函数,用一个变量来存储之前产生的随机数,用另一个来存储现在的随机数,循环num次

6.输出结果

二.程序流程图

三.源程序代码

 1 package class4;
 2 
 3 import java.util.Scanner;
 4 
 5 public class RandomTest {
 6 
 7     public static void main(String[] args) 
 8     {
 9         Scanner in = new Scanner(System.in);
10         
11         //显示公式
12         System.out.println("****************************************");
13         System.out.println("
利用公式:Xn+1 = (a*Xn+c)%m,得到随机数!
");
14         System.out.println("****************************************");
15         
16         //对各项系数赋值
17         int a = 10;
18         int c = 0;
19         int m = (int) ((Math.pow(2,27)-1));
20         
21         //对公式的数值进行输入
22         System.out.print("请输入要产生随机数的个数:");
23         int num = in.nextInt();
24         
25         System.out.print("请输入要产生随机数的初始值:");
26         int value = in.nextInt();
27         
28         //校验数值
29         if(num<0||value<0)
30         {
31             System.out.print("输入错误,不能输入负值!");
32             System.exit(1);
33         }
34         
35         //调用函数,产生并输出随机数
36         generatingRandomNumbers(a,c,m,num,value);
37         
38         in.close();
39         
40     }
41     
42     //用于产生随机数的函数
43     private static void generatingRandomNumbers(int a,int c,int m,int num,int value)
44     {
45         int thePrevious = value;        //定义此变量用来记录上一个随机数,方便公式计算
46         int random;                        //产生的随机数    
47         int[] test = new int[num];        //定义一个数组,用来存贮产生的随机数,方便测验
48         int record = 0;                    //用来记录重复了多少次
49         
50         for(int i = 0;i<num;i++)
51         {
52             random =  (a*thePrevious+c)%m;
53             test[i] = random;
54             System.out.println("第"+(i+1)+"个随机数是:  "+random);
55             thePrevious = random;
56         }
57         
58         //测验是否重复(不能判断有多少个)
59         for(int i = 0;i<num;i++)
60         {
61             for(int j = (i+1);j<num;j++)
62             {
63                 if(test[i]==test[j])
64                 {
65                     record++;
66                 }
67             }
68         }
69         if(record == 0)
70             System.out.println("没重复啦!");
71         else
72             System.out.println("重复"+record+"个啦!");
73     }
74     
75     
76     
77 
78 }

四.结果截图

原文地址:https://www.cnblogs.com/tianxiayoujiu/p/7659932.html