简体   繁体   English

如何生成一个可以被另一个随机生成的数整除的随机数

[英]How to generate a random number that is evenly divisible by another randomly generated number

I'm working on a simple math flashcards app using JavaScript and jQuery.我正在使用 JavaScript 和 jQuery 开发一个简单的数学抽认卡应用程序。 The available operations are addition, subtraction, multiplication, and division, each of which have functions that use generateTop() and generateBottom() to assign values to HTML elements.可用的运算有加法、减法、乘法和除法,每个运算都有使用generateTop()generateBottom()为 HTML 元素赋值的函数。

I'm having trouble figuring out how to use my division problem function to generate random numbers so that the topNumber is evenly divisible by the bottomNumber .我无法弄清楚如何使用我的除法问题函数来生成随机数,以便topNumber可以被bottomNumber整除。 I'm using the following code to generate random numbers for each problem:我正在使用以下代码为每个问题生成随机数:

let topNumber = 0;
let bottomNumber = 0;

function generateTop(max, min){
  topNumber = Math.floor(Math.random() * (max - min) + min);
  return topNumber;
};

function generateBottom(max, min){
  bottomNumber = Math.floor(Math.random() * (max - min) + min);
  return bottomNumber;
};

Here is my current division problem generator:这是我目前的除法问题生成器:

function division(){
  problemTop.html(generateTop(1, 144));
  problemBottom.html(generateBottom(1, topNumber));
  opSym.html("÷");
}

I can adjust the max and min to get a positive integer for addition, subtraction, and multiplication problems but am stuck on how to ensure that I get a positive integer for division problems.我可以调整最大值和最小值以获得加法、减法和乘法问题的正整数,但我坚持如何确保我获得除法问题的正整数。 I've tried messing with some different loop ideas but haven't gotten anything to work.我试过弄乱一些不同的循环想法,但没有任何工作。 I want to keep min at 1 and max at 144.我想保持最小值为 1,最大值为 144。

I've checked SO for solutions but can only find how to generate random numbers divisible by one other explicit, hard-coded number.我已经检查了 SO 的解决方案,但只能找到如何生成可被另一个明确的硬编码数字整除的随机数。 How can I adjust my division function so that the topNumber can be divided evenly by the bottomNumber ?如何调整我的除法函数,以便topNumber可以被topNumber平均bottomNumber

Add a denomenator parameter to your generateTop function, and pass in the randomly generated "bottom" (denominator) number returned from generateBottom .generateTop函数添加一个denomenator参数,并传入从generateBottom返回的随机生成的“底部”(分母)数字。 Multiply the new random number created in generateTop by the denominator, and return that.将在generateTop创建的新随机数乘以分母,然后返回。

You can do like this :你可以这样做:

 var a = Math.floor(Math.random() * 10) var b = a * Math.floor(Math.random() * 10) var c = b/a; document.write(b + " is divisible by " + a + " ( *" + c + ")" )

In a * b, b is always divisible by a.在 a * b 中,b 总是可以被 a 整除。

 let topNumber = 0; let bottomNumber = 0; function generateTop(max, min, a){ topNumber = a * Math.floor(Math.random() * (max - min) + min); return topNumber + " is divisible by " + a + " ( *" + topNumber/a + ")"; }; function generateBottom(max, min){ bottomNumber = Math.floor(Math.random() * (max - min) + min); return bottomNumber; }; document.write(generateTop(10, 1, generateBottom(10, 1)))

Just add a single if statement to make your function recursive:只需添加一个 if 语句即可使您的函数递归:

function generateBottom(max, min) {
    bottomNumber = Math.floor(Math.random() * (max - min) + min);
    if (topNumber % bottomNumber) {
        generateBottom(max, min);
    }
    return bottomNumber;
}

What this does is it divides topNumber and checks if a remainder exists.它的作用是除以topNumber并检查余数是否存在。 If there is a remainder, it means the two do not divide, so it is recalculated.如果有余数,则表示两者没有相除,因此重新计算。 Otherwise, it returns bottomNumber as per usual.否则,它bottomNumber像往常一样返回bottomNumber

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM