我想我知道如何将除法和输入到数组上的单元格中,但却纠结于如何在数组之间进行比较并打印出10对。
到目前为止我的代码如下:
public static void main(String[] args) {
int sum1=0,sum2=0;
int[] arr1=new int[67000];
int[] arr2=new int[67000];
for(int i =0;i<=10;i++){
for(int j =1;j<arr1.length;j++){
for(int k =0;k<j;k++){
if(j%k==0){
sum1+=k;
}
}arr1[j]=sum1;
}
for(int j =1;j<arr2.length;j++){
for(int k =0;k<j;k++){
if(j%k==0){
sum2+=k;
}
}arr2[j]=sum2;
}
}
} 发布于 2016-12-06 01:02:03
您正在计算两个数组中相同的值。只需创建一次数组。
for (int j = 2; j < arr.length; j++) {
int sum = 0;
for (int k = 1; k < j; k++) {
if (j % k == 0) {
sum += k;
}
}
arr[j] = sum;
}现在,这里,arr[n]是一个数n的真约数之和。
我们可以通过循环arr来比较这些对,如下所示:
int cnt = 0, first = 2;
while(cnt < 10) {
int second = arr[first];
if (second >= arr.length) {
continue;
}
if (second > first) {
if (first == arr[second]) {
System.out.printf("%d %d\n", first, second);
cnt++;
}
}
first++;
if (first >= arr.length) {
break;
}
}第一次检查是为了避免数组索引溢出,second > first检查是为了确保我们只向前看,不会两次重新发现对。
然后主要的检查是first == arr[second],它是友好数字。它的意思是,如果第二个数的因子之和,实际上是第一个数的因子之和,是第一个数本身,那么这些数就是友好的对。
旁注:程序可能可以用其他更好的方式编写。例如,当求和时,循环到所讨论数字的平方根就足够了,因为除数相互镜像。
https://stackoverflow.com/questions/40977563
复制相似问题