java - 不重复的除数/除数之和

标签 java math

我在为变量 ab 生成 100-999 范围内的两个数字时遇到问题。当数字b大于a时,随机数生成器应该中断。我需要
a) 检查有多少个不重复的公约数有这个数字
b) 打印变量 ab 中不常见的除数之和
我已经有了生成 var a,b 的代码(具有更大的 b),并且我认为我还有为我提供除数的循环,但似乎没有。< br/> 我应该改变什么来提供正确类型的除数?或者其中任何一个 - 因为它效果不好。

谢谢您的回答。

<小时/>
public class Ex3 {
    public static void main(String[] args) {
        Random rand = new Random();
        int a,b;
        List<Integer> divider= new ArrayList<Integer>();
        while(true)
        {
            a = rand.nextInt(900) + 100;
            b = rand.nextInt(900) + 100;
            System.out.println(a + "" + b);
            if(b>a) {

                for(int i=2;i<a;i++){
                    if((a % i)==0) divider.add(i); 
                }
                System.out.println(divider.toString());
                for(int i=2;i<a;i++){
                    if((b % i)==0) divider.add(i);
                }
                break;
            }

        }
    }

}

最佳答案

我相信您想要的是所有公约数,它们可以被划分为每个随机生成的整数值并且不留余数。除数通常从 1 开始,并逐渐(按 1)计算到随机值 a 和随机值 b。当然,检测到的公约数会被存储起来,并在除数搜索完成后显示。

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

所以,下面的示例代码:

  • 生成 100(含)到 999 之间的两个随机整数值 (含)根据您的规范。
  • 确保变量b中的随机整数值更大 比变量a中的随机整数值。 while 循环是 仅用于此特定目的且仅用于此目的。这 循环条件确保b中的值必须大于 a 中的值以便退出该循环。
  • 随机值将显示到控制台。
  • for 循环用于针对 a 中的值和值 在b中获取公约数。请注意这是如何完成的,付款 特别注意 termination for 循环的(或称为条件)部分 陈述。另请注意 initialization 循环语句部分,你可以看到我们初始化了整数 变量 i1,而不是 2。存储任何确定的公约数 在名为 commonDivisors 的列表接口(interface)对象中。名为 uncommonSum 的整数变量还通过循环代码块中的 else 语句保存所有不常见除数的总和。
  • 公约数显示在控制台窗口中。你会 请注意,1 始终是公约数。这才有意义 因为任何数字除以一都将等于该数字,而没有 余数。
  • 最后,使用for/each循环对公约数求和 包含在 commonDivisors 列表中,结果被放置 在名为 commonDivisorsSum 的整数变量中,然后 显示到控制台窗口。

控制台窗口的示例输出可能如下所示:

Random Numbers:   --> A: 848 | B: 976
Common Divisors:  --> [1, 2, 4, 8, 16]
Common Div Sum:   --> 31
UnCommon Div Sum: --> 359945

Here is the example code:

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);

关于java - 不重复的除数/除数之和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60365541/

相关文章:

java - JScrollPane 不移动 View

java - 我想在窗口 2 关闭 JAVAFX 后立即在窗口 1 上创建一个事件(添加了更多详细信息)

java - 对不同语言的 zip 文件进行 zip 提取

c++ - 在这种情况下, 'addition' 和 'bitwise or' 是否相同?

Python:球体的交集

java - Jar 文件不像在 NetBeans 中那样工作

java - 尝试将 HashSet 元素与 List 中的元素进行比较

算法击键动力学

c++ - 优化数学计算(乘法和求和)

math - 序言中的除法