友好的数字函数给出了错误的结果
问题描述:
正如所描述的标题,我想创建一个函数,告诉我两个数字我给的是友好的,但由于某种原因,我得到了错误的答案,我希望有人会看到这个问题。友好的数字函数给出了错误的结果
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");
}
}
}
答
引用维基百科:
亲和数是如此相关,使得每个的适当的除数的总和等于所述其他号码两个不同的数字。 (除了数字本身之外,数字的恰当除数是该数字的正数因子,例如,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");
}
答
这不是amicable数字的定义(根据维基百科)。
应该
if (nDivisorsSum == m && mDivisorsSum == n)
您也应该检查这些数字是不同的,正被输入时。您可以使用一个do-while
循环重复,直到给出有效的输入。