Java 1-100000友好数字之和(AP CS-A)

Java 1-100000友好数字之和(AP CS-A),java,Java,我们今天在课堂上的任务是找出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))

我们今天在课堂上的任务是找出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);
int和=0;
对于(int i=1;i<100000;i++){
INTA=1;

对于(int j=2;j,可以使用布尔数组跟踪已计算的值。下面是一个有效的解决方案:

        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);
boolean[]arr=new boolean[100000];
对于(int i=1;i<100000;i++){
INTA=1;

对于(int j=2;j)非常感谢您提供的解决方案,男士!工作非常有魅力!