Java 非重复除数/除数之和

Java 非重复除数/除数之和,java,math,Java,Math,我对为变量a和b生成两个范围为100-999的数字的程序有问题。当数字b大于a时,随机数生成器应断开。我需要 a) 检查有多少常见的非重复除数具有此数字 b) 打印作为变量a和b不常用的除数之和 我已经有了生成我vara,b(带有更大的b)的代码,我认为我也有提供我除数的循环,但似乎没有。 我应该更改什么以提供适当类型的除数?或者他们中的任何一个,因为它工作不好 谢谢你的回答 公共类Ex3{ 公共静态void main(字符串[]args){ Random rand=新的Random(); I

我对为变量ab生成两个范围为100-999的数字的程序有问题。当数字b大于a时,随机数生成器应断开。我需要
a) 检查有多少常见的非重复除数具有此数字
b) 打印作为变量ab不常用的除数之和
我已经有了生成我vara,b(带有更大的b)的代码,我认为我也有提供我除数的循环,但似乎没有。
我应该更改什么以提供适当类型的除数?或者他们中的任何一个,因为它工作不好

谢谢你的回答


公共类Ex3{
公共静态void main(字符串[]args){
Random rand=新的Random();
INTA,b;
列表分隔符=新的ArrayList();
while(true)
{
a=兰特耐克斯汀(900)+100;
b=兰特耐克斯汀(900)+100;
系统输出打印项次(a+“”+b);
如果(b>a){

对于(int i=2;i我相信你想要的是所有的公约数,它可以被分成每个随机生成的整数值,不留余数。公约数通常从1开始,然后递增(按1)将它们累加到随机值
a
和随机值
b
。当然,检测到的公约数会被存储,并在除数搜索完成后显示

下面示例代码中的第一个for循环执行此除数搜索。当您查看循环时,您可以看到与代码的差异。您关于应该更改什么以提供适当类型的除数的假设是正确的

下面是示例代码:

  • 生成从100(含)到999的两个随机整数值 (包括)按照您的规格
  • 确保变量b中的随机整数值较大 变量
    a
    .a中的随机整数值,而循环是 仅用于此特定目的,且仅用于此目的 循环条件确保
    b
    中的值必须大于
    a
    中的值,以退出该循环
  • 随机值显示在控制台上
  • for循环用于
    A
    中的值和 在
    b
    中,要获取公约数。注意这是如何实现的,请付费 特别注意 for循环的部分(或以其他方式称为条件) 声明。另请注意 在循环语句的第节中,您可以看到我们初始化了整数 变量
    i
    1,而不是2。存储任何确定的公约数 在名为
    commonDivisors
    的列表接口对象中。名为
    uncommonSum
    的整数变量还通过循环代码块中的else语句保留所有不常见的除数之和
  • 公约数将显示在控制台窗口中。您将 请注意,1始终是一个公约数。这才有意义 因为任何一个数除以一等于这个数,没有 剩余的
  • 最后,使用for/each循环对公约数求和 包含在
公约数列表中,并放置结果 在名为
commondivisiorssum
的整数变量中 显示到控制台窗口 控制台窗口的输出示例可能如下所示:

Random Numbers:   --> A: 848 | B: 976
Common Divisors:  --> [1, 2, 4, 8, 16]
Common Div Sum:   --> 31
UnCommon Div Sum: --> 359945
下面是示例代码:

inta=newrandom().nextInt(999-100+1)+100;
int b=0;
//循环,直到b中的随机数大于a中的随机数。
而(a>=b){
b=新随机数().nextInt(999-100+1)+100;
}
//为A和B显示随机生成的整数值。
System.out.println(“随机数:-->A:+A+”| B:+B);
//获取两个随机整数值之间的公约数。。。
列表公约数=新的ArrayList();
int unmonsum=0;

对于(int i=1;我似乎错了。这个问题要求两个不常见且不重复的除数之和(在我看来,这意味着‘忽略素数除数的幂’——对这一个不确定,值得向海报寻求澄清)
Random Numbers:   --> A: 848 | B: 976
Common Divisors:  --> [1, 2, 4, 8, 16]
Common Div Sum:   --> 31
UnCommon Div Sum: --> 359945
int a = new Random().nextInt(999 - 100 + 1) + 100;
int b = 0;

// Loop until the random number in b is greater than in a.
while (a >= b) {
    b = new Random().nextInt(999 - 100 + 1) + 100;
}
//Display random generated integer values for A and B.
System.out.println("Random Numbers:  --> A: " + a + " | B: " + b);

// Get Common Divisors between the two random integer values...
List<Integer> commonDivisors = new ArrayList<>();
int uncommonSum = 0;
for(int i = 1; i <= a && i <= b; i++) {
    if(a % i == 0 && b % i == 0) {
        commonDivisors.add(i);
    }
    else {
        uncommonSum += i;
    } 
}
System.out.println("Common Divisors: --> " + commonDivisors);

// Get an display the sum of Common Divisors 
int commonDivisorsSum = 0; 
for (int i : commonDivisors) {
    commonDivisorsSum = commonDivisorsSum + i;
}
System.out.println("Common Div Sum:  --> " + commonDivisorsSum);
System.out.println("UnCommon Div Sum: --> " + uncommonSum);