java菜鸟求教完数的求法

来源:百度知道 编辑:UC知道 时间:2024/05/15 14:51:31
完数是指某个数等于其因子之和,因子是指除去它本身之外的约数(应该是这样吧),下面是我的程序,不对:public class B
{public static void main(String args[])
{ int i=1,sum=0,j,x=0;
System.out.print("1000之内的完数有:");
for(i=3;i<=1000;i++)
{ for(j=2;j<i;j++)
{ if(i%j==0)
sum=sum+j;
}
if(i==sum+1)
System.out.println(i);
}
}
}
谢谢各位大虾帮忙,指出我的错误,或者提出新的思路,谢谢
谢谢各位大虾的热心帮助,我自己修改了一下,能成功了,我只是把sum改成局域变量,但是为什么这样可以,还是不懂,谢谢二楼,谢谢三楼让我学到一些新的东西,发散思维,就是稍显麻烦,我改后和四楼一样,谢谢,顺便帮我看看这个:
求素数
public class D
{ public static void main(String args[])
{ int i,j,q,x;
for(i=1;i<=100;i++)
{ for(j=2;j<i/2;j++)
{ x=i%j;
if(x==0)
{ System.out.println("不是素数的是:");
System.out.print(i+"");
continue;
}
}

for(q=1;q<=100;q++)
{ if(q!=i)
System.out.println("

这只菜鸟菜得比较厉害~~ 嘿嘿
给你提供思路,你的sum有问题!!!
自己看,希望你能自己找出问题,找不出再补充问题

public static void main(String[] args) {
System.out.println("1000以内的完数有:");
for (int i = 2; i <= 1000; i++) {
if(i == getWs(i)){
System.out.println(i);
}
}
}

public static int getWs(int a) {
int sum = 1;
int sqrt = (int) Math.sqrt(a);
for (int i = 2; i <= sqrt; i++) {
if (a % i == 0) {
sum += i;
sum += a / i;
// System.out.printf("%d,%d,", i, a / i);
}
}
if (a == sqrt * sqrt) {
sum -= sqrt;
}

return sum;
}

for (int i = 3; i <= 1000; i++) {
int sum = 0;
for (int j = 2; j < i; j++) {
if ((i % j) == 0)
sum = sum + j;
}