gpt4 book ai didi

java - 1-100,000 的友好数字总和 (AP CS-A)

转载 作者:行者123 更新时间:2023-12-04 08:56:14 24 4
gpt4 key购买 nike

我们今天在类里面的任务是找出 1-100000 中所有友好数的和。

 int sum = 0;
for(int i = 1; i < 100000; i++ ) {
int a = 1;
for (int j = 2; j <= Math.sqrt(i); j++) {
if (i % j == 0) {
if (j == (i / j))
a += j;
else
a += (j + i / j);
}
}

int b = 1;
for (int j = 2; j <= Math.sqrt(a); j++) {
if (a % j == 0) {
if (j == (a / j))
b += j;
else
b += (j + a / j);
}
}
if(a==b) sum += a;
}

System.out.println(sum);
这是我今天在类里面制作的代码。不幸的是它没有工作,而不是它的家庭作业。
友好号码定义为: https://en.wikipedia.org/wiki/Amicable_numbers#:~:text=Amicable%20numbers%20are%20two%20different,is%20(220%2C%20284).&text=For%20example%2C%20the%20proper%20divisors,aliquot%20sequence%20of%20period%202 .
我需要在不使用辅助方法和不重复计算可能性的情况下实现这个目标,但我以某种方式不断得到错误的答案。不幸的是,我们只能将数组和 ArrayList 用于数据结构以保持简单。

最佳答案

您可以使用 boolean 数组来跟踪您已经计算过的值。这是一个有效的解决方案:

        boolean[] arr = new boolean[100000];
for(int i = 1; i < 100000; i++ ) {
int a = 1;
for (int j = 2; j <= Math.sqrt(i); j++) {
if (i % j == 0) {
if (j == (i / j))
a += j;
else
a += (j + i / j);
}
}

int b = 1;
for (int j = 2; j <= Math.sqrt(a); j++) {
if (a % j == 0) {
if (j == (a / j))
b += j;
else
b += (j + a / j);
}
}

if(i == b && i != a) {
if(!arr[i])
arr[i] = true;
if(!arr[b])
arr[b] = true;
}
}

int sum = 0;
for(int i = 0; i < arr.length; i++) {
if(arr[i] == true) {
sum += i;
}
}
System.out.println(sum);
为了使这对数字 1 到 n 起作用,您可以用方法参数替换 for 循环中的数组长度和 100000。

关于java - 1-100,000 的友好数字总和 (AP CS-A),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63820505/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com