正如所描述的标题我想要创建一个函数,告诉我两个数字我给出的是友好的,但由于某种原因我得到了错误的答案,我希望有人会看到问题.
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");
}
}
}
Run Code Online (Sandbox Code Playgroud)
引用维基百科:
Amicable数字是两个不同的数字,因此相关的是每个的适当除数的总和等于另一个数.(数字的适当除数是除数字本身之外的该数字的正因子.例如,6的适当除数是1,2和3.)一对友好数字构成句点2的等分序列.一个相关的概念是一个完整数字,它是一个等于其自身适当除数之和的数字,换句话说,是一个形成句点1的等分序列的数字.数字是等于序列序列的成员,周期大于2被称为社交号码.
那么最终导致你失败的是检查这两个数字是否友好的条件.你需要检查所有divisiors的总和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");
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
118 次 |
| 最近记录: |