热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

在Java中使用中间平方法生成随机数

在Java中使用中间平方法生成随机数原文:https://w

在 Java 中使用中间平方法生成随机数

原文:https://www . geeksforgeeks . org/generate-random-numbers-use-mid-square-in-Java 方法/

这种方法是由范·诺依曼提出的。在这种方法中,我们有一个种子,然后种子被平方,它的中期作为随机数取出。假设我们有一个种子,它有 N 个数字,我们对这个数字进行平方,得到一个 2N 个数字,如果它没有变成 2N 个数字,我们在这个数字前面加零,使它变成 2N 个数字。一个好的算法基本上是一个不依赖于种子的算法,周期也应该是最长的,在它开始重复自己之前,它应该几乎触及它范围内的每个数字。作为经验法则,记住周期越长,数字越随机。

例:

Consider the seed to be 14 and we want a two digit random number.
Number --> Square --> Mid-term
14 --> 0196 --> 19
19 --> 0361 --> 36
36 --> 1296 --> 29
29 --> 0841 --> 84
84 --> 7056 --> 05
05 --> 0025 --> 02
02 --> 0004 --> 00
00 --> 0000 --> 00

在上面的例子中,我们可以注意到我们得到了一些随机数 19,36,29,84,05,02,00,它们似乎是随机选择的,这样我们得到了多个随机数,直到我们遇到一个自重复链。我们也知道了这种方法的一个缺点,如果我们遇到 0,那么我们会从那个点得到一串 0。此外,考虑我们得到一个随机数 50,平方将是 2500,期中又是 50,我们进入这个 50 的链,有时我们可能会更经常地遇到这样的链,这是一个缺点,由于这些缺点,这种方法实际上不能用于生成随机数。

实现:

Java


// Generate Random Numbers Using Middle
// Square Method in Java
import java.util.Random;
public class Main {
    static int rangeArray[]
        = { 1,      10,      100,      1000,     10000,
            100000, 1000000, 10000000, 100000000 };
    // function for generating a random number
    static long middleSquareNumber(long num, int digit)
    {
        long sqn = num * num, nextNum = 0;
        int trim = (digit / 2);
        sqn = sqn / rangeArray[trim];
        for (int i = 0; i < digit; i++) {
            nextNum += (sqn % (rangeArray[trim]))
                       * (rangeArray[i]);
            sqn = sqn / 10;
        }
        return nextNum;
    }
    public static void main(String args[])
    {
        int numberOfDigit = 3;
        int start = rangeArray[numberOfDigit - 1],
            end = rangeArray[numberOfDigit];
        // create rand object
        Random rand = new Random();
        long nextNumber = rand.nextInt(end - start) + start;
        System.out.print(
            "The random numbers for the Geeks are:\n"
            + nextNumber + ", ");
        // Generating 10 random numbers
        for (int i = 0; i < 9; i++) {
            nextNumber = middleSquareNumber(nextNumber,
                                            numberOfDigit);
            System.out.print(nextNumber + ", ");
        }
    }
}

输出

The random numbers for the Geeks are:
325, 562, 584, 105, 102, 40, 160, 560, 360, 960,

注意:上面的程序展示了 Middle Square Number 方法是如何工作的,你可以多次运行程序来查看每次生成的不同随机数。由于其缺点,不建议将这种方法作为生成随机数的理想方法,但是这种方法也可以用作散列算法和一些其他应用。


推荐阅读
  • 本文讨论了在openwrt-17.01版本中,mt7628设备上初始化启动时eth0的mac地址总是随机生成的问题。每次随机生成的eth0的mac地址都会写到/sys/class/net/eth0/address目录下,而openwrt-17.01原版的SDK会根据随机生成的eth0的mac地址再生成eth0.1、eth0.2等,生成后的mac地址会保存在/etc/config/network下。 ... [详细]
  • 微软头条实习生分享深度学习自学指南
    本文介绍了一位微软头条实习生自学深度学习的经验分享,包括学习资源推荐、重要基础知识的学习要点等。作者强调了学好Python和数学基础的重要性,并提供了一些建议。 ... [详细]
  • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
  • Java序列化对象传给PHP的方法及原理解析
    本文介绍了Java序列化对象传给PHP的方法及原理,包括Java对象传递的方式、序列化的方式、PHP中的序列化用法介绍、Java是否能反序列化PHP的数据、Java序列化的原理以及解决Java序列化中的问题。同时还解释了序列化的概念和作用,以及代码执行序列化所需要的权限。最后指出,序列化会将对象实例的所有字段都进行序列化,使得数据能够被表示为实例的序列化数据,但只有能够解释该格式的代码才能够确定数据的内容。 ... [详细]
  • Java容器中的compareto方法排序原理解析
    本文从源码解析Java容器中的compareto方法的排序原理,讲解了在使用数组存储数据时的限制以及存储效率的问题。同时提到了Redis的五大数据结构和list、set等知识点,回忆了作者大学时代的Java学习经历。文章以作者做的思维导图作为目录,展示了整个讲解过程。 ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • 不同优化算法的比较分析及实验验证
    本文介绍了神经网络优化中常用的优化方法,包括学习率调整和梯度估计修正,并通过实验验证了不同优化算法的效果。实验结果表明,Adam算法在综合考虑学习率调整和梯度估计修正方面表现较好。该研究对于优化神经网络的训练过程具有指导意义。 ... [详细]
  • Java学习笔记之面向对象编程(OOP)
    本文介绍了Java学习笔记中的面向对象编程(OOP)内容,包括OOP的三大特性(封装、继承、多态)和五大原则(单一职责原则、开放封闭原则、里式替换原则、依赖倒置原则)。通过学习OOP,可以提高代码复用性、拓展性和安全性。 ... [详细]
  • 本文介绍了iOS数据库Sqlite的SQL语句分类和常见约束关键字。SQL语句分为DDL、DML和DQL三种类型,其中DDL语句用于定义、删除和修改数据表,关键字包括create、drop和alter。常见约束关键字包括if not exists、if exists、primary key、autoincrement、not null和default。此外,还介绍了常见的数据库数据类型,包括integer、text和real。 ... [详细]
  • IjustinheritedsomewebpageswhichusesMooTools.IneverusedMooTools.NowIneedtoaddsomef ... [详细]
  • 欢乐的票圈重构之旅——RecyclerView的头尾布局增加
    项目重构的Git地址:https:github.comrazerdpFriendCircletreemain-dev项目同步更新的文集:http:www.jianshu.comno ... [详细]
  • 电话号码的字母组合解题思路和代码示例
    本文介绍了力扣题目《电话号码的字母组合》的解题思路和代码示例。通过使用哈希表和递归求解的方法,可以将给定的电话号码转换为对应的字母组合。详细的解题思路和代码示例可以帮助读者更好地理解和实现该题目。 ... [详细]
  • YOLOv7基于自己的数据集从零构建模型完整训练、推理计算超详细教程
    本文介绍了关于人工智能、神经网络和深度学习的知识点,并提供了YOLOv7基于自己的数据集从零构建模型完整训练、推理计算的详细教程。文章还提到了郑州最低生活保障的话题。对于从事目标检测任务的人来说,YOLO是一个熟悉的模型。文章还提到了yolov4和yolov6的相关内容,以及选择模型的优化思路。 ... [详细]
  • 目录实现效果:实现环境实现方法一:基本思路主要代码JavaScript代码总结方法二主要代码总结方法三基本思路主要代码JavaScriptHTML总结实 ... [详细]
author-avatar
水平蓝精灵天堂_678
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有