Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 当第一个整数除以第二个整数时,生成两个余数为0的随机整数_Java_Oop - Fatal编程技术网

Java 当第一个整数除以第二个整数时,生成两个余数为0的随机整数

Java 当第一个整数除以第二个整数时,生成两个余数为0的随机整数,java,oop,Java,Oop,嗨,我需要生成两个随机整数,这样,如果我将第一个整数除以第二个整数,提醒应该是0。我正在寻找这样做的方法。此外,两个整数都应大于0 Random rnd=new Random(); int firstNum=rnd.nextInt(); int secondNum=rnd.nextInt(); //Some efficient calculations here to make firstNum % secondNum equals 0. 我想要firstNum%secondNum等于0 下面

嗨,我需要生成两个随机整数,这样,如果我将第一个整数除以第二个整数,提醒应该是0。我正在寻找这样做的方法。此外,两个整数都应大于0

Random rnd=new Random();
int firstNum=rnd.nextInt();
int secondNum=rnd.nextInt();
//Some efficient calculations here to make firstNum % secondNum equals 0.
我想要firstNum%secondNum等于0


下面是一个简单的算法:

  • 随机选择第一个整数
  • 对第一个整数进行因子运算,并构建该数字的所有除数的列表
  • 随机选择其中一个除数
  • 第二个数的唯一有效选择是第一个数的除数。如果第一个数字是素数,则可能的选择集可以小到2;如果1`且数字本身不是可接受的答案,则可能的选择集可以小到0(您尚未指定)

    另一种方法是只为第二个数字生成随机数,并检查它们是否除以第一个数字,但这可能需要很长时间,特别是如果第一个数字是一个大素数。不推荐

    There is a very simple answer to your problem.
    
    create a method which generates two random numbers using Random class. And also declare two variables at class level.
    
    
    
    int a,b;    
    
    void compute()
        {
        Random r1=new Random();
    
        //nextInt method will generate two numbers between a range, here from 1 to 1000
        this.a=r1.nextInt(1000)+1;
        this.b=r1.nextInt(1000)+1;
    
        //now check if the desired numbers gives 0 when dividing a by b.
    
        if(a%b==0)
        {
        Sys.out(this.a+" and "+this.b);
        }
        else
        {
        compute();
        }
    }
    
    
    call this method and it will run till you find two numbers which gives remainder 0. 
    

    这种方法可能比其他方法花费的时间稍多,但它符合问题的基本概念,因为它生成两个随机数,而不考虑其他数字的知识,因此它不关心该数字是素数、奇数还是偶数。它会给你两个数,这两个数彼此相除,得到余数0。

    如果你能对第一个数和第二个数进行限制,那么你可以尝试下面的解决方案

    public static void Main()
        {
            var random = new Random();
            int firstNo = random.Next(800);
            int secondNo = random.Next(400);
    
            while(firstNo % secondNo != 0)
            {
                 secondNo = random.Next(400);
            }
    
            Console.WriteLine(firstNo);
            Console.WriteLine(secondNo);
        }
    }
    
    第二个随机数的种子是400,因为一个数的除数总是该数本身或其值的一半


    也许你可以修改它以适应你的场景。

    我会稍微改变一下算法

    您需要的是两个整数,都具有某种随机性(彼此独立),例如firstNumber/secondNumber=K+0,其中K是某个整数。但如果你解firstNumber,这意味着firstNumber=secondNumber*K。所以,不要直接生成secondNumber,而是生成K

  • 选择secondNumber作为随机整数。一个好方法是使用(您需要
    +1
    ,因为
    nextInt
    可能返回0)
  • 选择K作为随机整数,与上一步类似
  • 将firstNumber计算为secondNumber*K。现在放弃K;你不再需要它了

  • 现在你有两个号码了。您知道secondNumber/firstNumber的余数为0,因为secondNumber/firstNumber=K,其中K是您选取的第二个随机整数。

    如果第一个随机整数是素数,该怎么办?这里有一个简单的算法:1)随机选择第一个整数;2) 建立一个该数字所有除数的列表;2) 随机选择其中一个除数。是。我同意这个解决方案,但这需要更多的计算。这样做更有效吗?谢谢你的回答:-)不。第二个数字的有效答案集只是第一个数字的除数。您可以随机尝试数字,直到找到一个,但这可能需要很长时间,特别是如果第一个数字是一个大素数。到目前为止,最快的方法是计算第一个数字的因子,建立一个因子列表,然后随机选择一个,假设第二个数字必须是随机选择的。我会用另一种方法。选择两个随机整数,然后将它们相乘。那么你的两个数字是(1)乘积和(2)第一个随机数。因为第一个数字乘以一个整数得到乘积,所以您知道第一个数字除以该乘积。@yshavit您的情况将始终生成0,但firstNum/secondNum将始终等于firstNum。但是我保留了你的建议,我可以介绍一个第三个数,它会乘以多少倍。我希望这对我有用。谢谢,很好的解决方案。谢谢你的帮助,先生。不知道为什么其他人反对我的投票question@RashidAbbas可能是因为你自己没有表现出任何解决问题的努力,这会给人留下你很懒的印象,并期望别人为你做工作。@shmosel谢谢。下次我会小心的。这很容易导致堆栈溢出。谢谢您指出这一点。业余爱好者的错误,因为我是初学者。现在我已经更正了。您仍然在递归调用
    compute()
    。这现在不是问题。因为每次调用compute时,我都会过度写入a和b的值。因此没有堆栈溢出错误。连接是什么?这不是Java。您可以使用do/while来避免重复
    secondNo=random.Next(400)