一个数如果恰好等于它的因子之和,这个数就称为 "完数 "。例如6=1+2+3.编程 找出1000以内的所有完数。  这个题想了好久,一直找不到个合适的算法,所以还要请教各位。  谢谢

解决方案 »

  1.   

    int []wanShu = new int[1000];
    int j = 0;
    wanShu[j++] = 1;
    int []zhiShu = new int[1000];
    int m = 0;
    zhiShu[m++] = 1;
    for(int i=2; i<=1000; i++){
      int temp = 0;//因子和
      int temp1;//用来判断是否能被整除
      int temp2 = i;//用来存余数
      for(int k=m-1; k>=0; k--){//除数从比i小的数质开始
        temp1 = temp2 % zhiShu[k];
        if(temp1 == 0){//如果能整除
          if(k == 0){//如果除数推进到1
            if(temp == 0){zhiShu[m++] = i;break;}//除1外了因子和为0,表示i是质数
          }
          temp2 = temp2 / zhiShu[k];//获得余数
          if(temp2 > zhiShu[k]){k++;}//用来保证除数是可以用来除的数中最大的
          temp += zhiShu[k];求因子和
        }
      } 
    if(i == temp){wanShu[j++] = i;}//求得完数
    }
      

  2.   


    class Example6 
    {public static void main(String args[]) 
    {int count,i,j; 
    for(i=1;i<=1000;i++) 
    {count=1; 
    for(j=2;j<=i/2;j++) 
    {if(i%j==0) 
    count=count+j; 

    if(i==count) 
    System.out.println("i="+i); 



      

  3.   


    public class PerfectNumber { private void calcPerfectNumber(int maxNumber) {
      int sum = 0;  for (int i = 1; i <= maxNumber; i++) {
       sum = 0;
       for (int m = 1; m < i; m++) {
        if (i % m == 0) {
         sum += m;    }
       }
       if (sum == i) {
        System.out.print(i + " is a perfect number and it's factors are: ");
        for (int m = 1; m < i; m++) {
         if (i % m == 0) {
          System.out.print(m + " ");
         }
         if(m == i - 1){
          System.out.println();
         }
        }
       }
      }
     } public static void main(String arg[]) {
      PerfectNumber calc = new PerfectNumber();
      calc.calcPerfectNumber(1000);
     }
      

  4.   


    public class TestNum {

    public static void main(String [] args){

    for(int i=1;i<1000;i++){
    int s=0;
    for(int a=1;a<i;a++){
    if(i%a==0){
    s=s+a;
    }
    }
    if(s==i){
    System.out.println("i:"+i);
    }
    }
    }
    }
      

  5.   


     其实主要是这类题目,我不知道怎么去搜答案 还是Thanks