Java 友好数函数给出了错误的结果

Java 友好数函数给出了错误的结果,java,Java,正如标题所描述的,我想创建一个函数,告诉我,我给出的两个数字都是友好的,但由于某些原因,我得到了错误的答案,我希望有人能看到这个问题 public class Amicable{ public static void main(String[] args){ int n, m; int ndivisorsSum = 0; int mdivisorsSum = 0; n = Integer.parseInt(args[0]); m = Integer.

正如标题所描述的,我想创建一个函数,告诉我,我给出的两个数字都是友好的,但由于某些原因,我得到了错误的答案,我希望有人能看到这个问题

public class Amicable{

public static void main(String[] args){

    int n, m;
    int ndivisorsSum = 0;
    int mdivisorsSum = 0;

    n = Integer.parseInt(args[0]);
    m = Integer.parseInt(args[1]);

    for(int i = 1; i < n; i++){
        if (n % i == 0){
            ndivisorsSum = ndivisorsSum + i;
        }
    }

    for(int i = 1; i < m; i++){
        if (m % i == 0){
            mdivisorsSum = mdivisorsSum + i;
        }
    }

    if (ndivisorsSum == mdivisorsSum) {
        System.out.println(n + " and " + m + " are amicable numbers");
    }else{
        System.out.println(n + " and " + m + " are not amicable numbers");
    }

}
}
公共类友好{
公共静态void main(字符串[]args){
int n,m;
int ndivisorsSum=0;
int mdivisorsSum=0;
n=整数.parseInt(args[0]);
m=整数.parseInt(args[1]);
对于(int i=1;i
这不是友好数字的定义(根据维基百科)

应该是

if (nDivisorsSum == m && mDivisorsSum == n)

您还应检查输入的数字是否不同且为正数。你可以使用
do-while
循环重复,直到给出有效的输入。

这不是友好数字的定义(根据维基百科)

应该是

if (nDivisorsSum == m && mDivisorsSum == n)
您还应检查输入的数字是否不同且为正数。您可以使用
do while
循环重复,直到给出有效的输入。

引用维基百科:

友好数是两个相互关联的不同数,每个数的适当因子之和等于另一个数。(一个数的真除数是该数的正因子,而不是该数本身。例如,6的真除数是1、2和3。)一对友好数构成周期2的等分序列。一个相关的概念是一个完美数,它是一个等于它自己的适当除数之和的数,换句话说,一个形成周期1等分序列的数。作为周期大于2的等分序列的成员的数字称为社交数字

因此,让你最终失败的是你检查两个数字是否友好的条件。您需要检查
n
的所有除数之和是否等于
m
和vica verse

int n, m;
int ndivisorsSum = 0;
int mdivisorsSum = 0;

n = 220;
m = 284;

for(int i = 1; i < n; i++){
    if (n % i == 0){
        ndivisorsSum += i;
    }
}

for(int i = 1; i < m; i++){
    if (m % i == 0){
        mdivisorsSum += i;
    }
}

if (ndivisorsSum == m && mdivisorsSum == n) { // Your mistake is here.
    System.out.println(n + " and " + m + " are amicable numbers");
}else{
    System.out.println(n + " and " + m + " are not amicable numbers");
}
intn,m;
int ndivisorsSum=0;
int mdivisorsSum=0;
n=220;
m=284;
对于(int i=1;i
引用维基百科:

友好数是两个相互关联的不同数,每个数的适当因子之和等于另一个数。(一个数的真除数是该数的正因子,而不是该数本身。例如,6的真除数是1、2和3。)一对友好数构成周期2的等分序列。一个相关的概念是一个完美数,它是一个等于它自己的适当除数之和的数,换句话说,一个形成周期1等分序列的数。作为周期大于2的等分序列的成员的数字称为社交数字

因此,让你最终失败的是你检查两个数字是否友好的条件。您需要检查
n
的所有除数之和是否等于
m
和vica verse

int n, m;
int ndivisorsSum = 0;
int mdivisorsSum = 0;

n = 220;
m = 284;

for(int i = 1; i < n; i++){
    if (n % i == 0){
        ndivisorsSum += i;
    }
}

for(int i = 1; i < m; i++){
    if (m % i == 0){
        mdivisorsSum += i;
    }
}

if (ndivisorsSum == m && mdivisorsSum == n) { // Your mistake is here.
    System.out.println(n + " and " + m + " are amicable numbers");
}else{
    System.out.println(n + " and " + m + " are not amicable numbers");
}
intn,m;
int ndivisorsSum=0;
int mdivisorsSum=0;
n=220;
m=284;
对于(int i=1;i