正如所描述的标题我想创建一个函数,告诉我两个数字我给出的是友好的,但由于某种原因我得到错误的答案,我希望有人会看到问题。
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");
}
}
}
答案 0 :(得分:5)
引用维基百科:
Amicable数字是两个不同的数字,因此相关的是每个的适当除数的总和等于另一个数。 (数字的适当除数是除数字本身之外的该数字的正因子。例如,6的适当除数是1,2和3.)一对友好数字构成句点2的等分序列。一个相关的概念是一个完整数字,它是一个等于其自身适当除数之和的数字,换句话说,是一个形成句点1的等分序列的数字。数字是等于序列序列的成员,周期大于2被称为社交号码。
那么最终导致你失败的是检查这两个数字是否友好的条件。你需要检查n
的所有divisiors的总和是否等于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 :(得分:1)
这不是友好数字的定义(根据维基百科)。
应该是
if (nDivisorsSum == m && mDivisorsSum == n)
输入时,您还应检查数字是否正确且为正数。您可以使用do-while
循环重复,直到给出有效输入。