简体   繁体   English

如何从随机数数学测验中排除素数?

[英]how to exclude prime number from random number math quiz?

I tried this for my math quiz and it works wonders, but I did not get the fractional part:我在数学测验中试过这个,效果很好,但我没有得到小数部分:

public void gameContinue() {
  int num1 = (int) (Math.random() * 100 + 1);
  java.util.List<Integer> firstNumDivisors = getDivisors(num1);

  int divisorsRandIndex = (int) (Math.random() * firstNumDivisors.size());
  int num2 = firstNumDivisors.get(divisorsRandIndex);

  question.setText(num1 + " ÷ " + num2);
  
  // Create your question from first and second numbers here
}

private static java.util.List<Integer> getDivisors (int number) {
  java.util.List<Integer> divisors = new java.util.ArrayList<>();

  for (int i = 1; i <= number; i++)
    if (number % i == 0)
      divisors.add(i);
  return divisors;
}

But after some testing, I do not want to include prime numbers (more than 10 like 11, 13, 17, 19 and so on) and I also do not want the answer to be more than 10 (11, 12, 13 and so on)但经过一些测试,我不想包括素数(超过 10,如 11、13、17、19 等),我也不希望答案超过 10(11、12、13 等上)

Should I make a string for prime numbers and make the program exclude those?我应该为素数创建一个字符串并让程序排除这些吗? Also, how can I make the answer to be no more than 10?另外,我怎样才能使答案不超过10?

Thank you谢谢

(Some points of your question required some interpretation - hopefully I was correct; otherwise, just add a comment and I'll try to adapt.) (您的问题的某些要点需要一些解释 - 希望我是正确的;否则,只需添加评论,我会尝试适应。)

Require answer always <= 10要求答案总是 <= 10

To ensure the selected divisor does not result in an "answer" more than 10, then simply restrict the divisors added to the divisor list.为确保所选除数不会导致“答案”超过 10,然后简单地限制添加到除数列表中的除数。

Modify the one line in getDivisors as such:修改getDivisors中的一行,如下所示:

// i is an integral divisor and the resulting quotient is <= 10
if (number % i == 0 && number / i <= 10)

Then when the code randomly selects a divisor from the list, the "answer" to the question:然后当代码从列表中随机选择一个除数时,问题的“答案”:

num1 ÷ num2数字 1 ÷ 数字 2

will always be <= 10, where num1 is a number from 1 to 100 (inclusive) and num2 is the randomly selected integral divisor.将始终 <= 10,其中 num1 是从 1 到 100(含)的数字,num2 是随机选择的整数除数。

Exclude some dividends ( num1 )排除一些股息( num1

In order to exclude certain numbers from a range (for your num1 ) you could do it as a loop as in here .为了从范围中排除某些数字(对于您的num1 ),您可以将其作为循环来执行,如here

Or you could create a list of the acceptable numbers and then use Random to provide an index into your acceptable list (credit reference answer for list creation) :或者您可以创建一个可接受数字的列表,然后使用Random为您的可接受列表提供一个索引(用于创建列表的信用参考答案)

// an array of acceptable numbers as dividend
int[] acceptableNums = IntStream.range(1, 101).filter(a -> !java.util.List.of(11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97).contains(a)).toArray();

// here i chose to use "r" which is java.util.Random r = new java.util.Random() because my test involved a loop and I want to get uniform distribution over the loop.
int num1 = acceptableNums[r.nextInt(acceptableNums.length)];

So the complete test:所以完整的测试:

public static void main(String[] args) {
    
    java.util.Random r = new java.util.Random();

    int[] acceptableNums = IntStream.range(1, 101).filter(a -> !java.util.List.of(11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97).contains(a)).toArray();

    for (int i = 0; i < 100; i++) {

        int num1 = acceptableNums[r.nextInt(acceptableNums.length)];
        java.util.List<Integer> firstNumDivisors = getDivisors(num1);

        int divisorsRandIndex = (int) (Math.random() * firstNumDivisors.size());
        int num2 = firstNumDivisors.get(divisorsRandIndex);


        System.out.println("What is " + num1 + " ÷ " + num2+ " (Answer: "+num1/num2+")");
        // Create your question from first and second numbers here
        
    }
}

    private static java.util.List<Integer> getDivisors ( int number){
        java.util.List<Integer> divisors = new java.util.ArrayList<>();

        for (int i = 1; i <= number; i++)
            if (number % i == 0 && number / i <= 10)
                divisors.add(i);

        return divisors;
    }    

And the output:和 output:

What is 78 ÷ 39 (Answer: 2)
What is 1 ÷ 1 (Answer: 1)
What is 32 ÷ 8 (Answer: 4)
What is 68 ÷ 17 (Answer: 4)
What is 26 ÷ 13 (Answer: 2)
What is 94 ÷ 47 (Answer: 2)
What is 46 ÷ 23 (Answer: 2)
What is 68 ÷ 68 (Answer: 1)
What is 10 ÷ 2 (Answer: 5)
What is 70 ÷ 10 (Answer: 7)
What is 38 ÷ 38 (Answer: 1)
What is 75 ÷ 75 (Answer: 1)
What is 1 ÷ 1 (Answer: 1)
What is 90 ÷ 30 (Answer: 3)
What is 62 ÷ 62 (Answer: 1)
What is 95 ÷ 95 (Answer: 1)
What is 60 ÷ 6 (Answer: 10)
What is 27 ÷ 3 (Answer: 9)
What is 5 ÷ 1 (Answer: 5)
What is 28 ÷ 14 (Answer: 2)
What is 1 ÷ 1 (Answer: 1)
What is 70 ÷ 14 (Answer: 5)
What is 21 ÷ 21 (Answer: 1)
What is 40 ÷ 40 (Answer: 1)
What is 51 ÷ 17 (Answer: 3)
What is 24 ÷ 12 (Answer: 2)
What is 5 ÷ 1 (Answer: 5)
What is 58 ÷ 58 (Answer: 1)
What is 91 ÷ 91 (Answer: 1)
What is 91 ÷ 13 (Answer: 7)
What is 94 ÷ 94 (Answer: 1)
What is 28 ÷ 14 (Answer: 2)
What is 46 ÷ 23 (Answer: 2)
What is 95 ÷ 95 (Answer: 1)
What is 58 ÷ 58 (Answer: 1)
What is 2 ÷ 2 (Answer: 1)
What is 55 ÷ 55 (Answer: 1)
What is 20 ÷ 5 (Answer: 4)
What is 92 ÷ 23 (Answer: 4)
What is 21 ÷ 21 (Answer: 1)
What is 10 ÷ 5 (Answer: 2)
What is 1 ÷ 1 (Answer: 1)
What is 69 ÷ 69 (Answer: 1)
What is 84 ÷ 21 (Answer: 4)
What is 96 ÷ 24 (Answer: 4)
What is 90 ÷ 45 (Answer: 2)
What is 88 ÷ 44 (Answer: 2)
What is 88 ÷ 22 (Answer: 4)
What is 72 ÷ 36 (Answer: 2)
What is 40 ÷ 5 (Answer: 8)
What is 8 ÷ 4 (Answer: 2)
What is 10 ÷ 2 (Answer: 5)
What is 24 ÷ 3 (Answer: 8)
What is 66 ÷ 66 (Answer: 1)
What is 90 ÷ 30 (Answer: 3)
What is 66 ÷ 66 (Answer: 1)
What is 58 ÷ 58 (Answer: 1)
What is 91 ÷ 91 (Answer: 1)
What is 58 ÷ 58 (Answer: 1)
What is 28 ÷ 7 (Answer: 4)
What is 96 ÷ 16 (Answer: 6)
What is 90 ÷ 30 (Answer: 3)
What is 91 ÷ 91 (Answer: 1)
What is 12 ÷ 4 (Answer: 3)
What is 4 ÷ 4 (Answer: 1)
What is 84 ÷ 84 (Answer: 1)
What is 8 ÷ 1 (Answer: 8)
What is 49 ÷ 7 (Answer: 7)
What is 14 ÷ 7 (Answer: 2)
What is 16 ÷ 8 (Answer: 2)
What is 51 ÷ 17 (Answer: 3)

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

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