2015-11-03 70 views
1

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

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

} 
} 

回答

5

引用维基百科:

亲和数是如此相关,使得每个的适当的除数的总和等于所述其他号码两个不同的数字。 (除了数字本身之外,数字的恰当除数是该数字的正数因子,例如,6的适当除数是1,2和3.)一对友好数字构成了第2期的等分序列。一个相关的概念是一个完美数字,它是一个等于它自己的合适除数之和的数字,换句话说就是一个形成周期1等分序列的数字。数字是周期大于等于一个等分序列的成员2被称为社交数字。

所以最终失败的是你的条件,检查两个数字是否友好。你需要检查n的所有divies的总和是否等于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"); 
} 
1

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

应该

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

您也应该检查这些数字是不同的,正被输入时。您可以使用一个do-while循环重复,直到给出有效的输入。

相关问题