编写java循环程序,找出1000以内的所有完数

如题所述

public class Test {

    public static void main(String[] args) {
        int i,j,sum;    //sum用来存放因子之和        
        for(i=1;i<1000;i++)   //对1到1000以内的数依次尝试
        {
           sum = 0;          //给sum赋值,同时也是对上一次的值清空
           for(j=1;j<=i/2;j++)   //查找因子
           {
               if(i%j==0)          // 如果是因子
               {
                    sum+=j;        //把当前的因子累加到sum中   
               }
           }
           if(sum==i)            //判断是不是完数,即因子之和等于自身
           {
               System.out.print(i+" its factors are:   ");        //是完数,输出
            for(j=1;j<=i/2;j++)                          //再次找出这个完数的因子
            {
               if(i%j==0)                                    //输出各个因子
                System.out.print(j+", ");
               }
               System.out.println();
            }
        }
    }
}

 这些题百度里面都是找得到的

温馨提示:答案为网友推荐,仅供参考
第1个回答  2016-12-23
public class PerfectNumberTest {
    public static void main(String[] args) {
        int count = 0;//定义一个计数器
        System.out.println("1~10000范围内的所有完数如下:");
        long start = System.currentTimeMillis();
        for (int num = 2; num <= 10000 ; num ++ ) {
            int sum = 0;//定义一个因子求和公式
            for (int divisor = 1 ; divisor <= num / divisor ; divisor ++) {
                if (num % divisor == 0 && divisor != num / divisor) {//若num开根号结果不是他的因子
                    sum = divisor + (num / divisor) + sum;//则num/divisor也一定是他的因子
                } else if (num % divisor == 0 && divisor == num / divisor) {//若num开根号的结果是他的因子
                    sum = divisor + sum;//则只把因子(num/divisor重复因子)赋值给sum
                }
            }
            if ((sum - num) == num) {//如果因子之和-该数等于该数,则这个数就是完数
                count ++;//计数器加一
                System.out.println("第 " + count +" 完数是: " + num);//输出完数
            }
        }
        long end = System.currentTimeMillis();
        System.out.println("遍历全部完数所使用的时间: " + (end - start) + " 毫秒");
    }
}

参考简书的一篇文章 http://www.jianshu.com/p/5a0d45da2b99


第2个回答  2015-01-12
首先,我不知道完数是什么 不过百度了下发现有一个人用c++编好了 省的我动脑筋了就,下面我把那朋友写的换成了java的运行了下发现还是可以的你直接用就好了:

int i,j,k,h,s,sum;
int[] a = new int[200];
s=0;
sum=0;

for(i=2;i<=1000;i++)
{
s=0;//此处s=0一定要加,因为前几次循环的时候s的值已经改变
k=0;
for(j=1;j<i;j++)
{
if((i%j)==0){a[k]=j;k++;}
}
for(h=0;h<k;h++)
{
s+=a[h];
}
if(i==s){System.out.println(i);sum++;}
}
System.out.println(sum);
结果就这样了,变量定义的有点乱,你看看就行了我也懒得改这个,输出的结果是完数以及完数的个数,放到main里直接运行
第3个回答  2015-01-12
  public static void main(String[] args)
 {
     int s;
     for(int i=1;i<=1000;i++)
     {
        s=0;
        for(int j=1;j<i;j++)
            if(i % j==0)
               s=s+j;
           if(s==i)
              System.out.print(i+" ");
     }
     System.out.println();
 }

第4个回答  2019-12-23
package mytest;

public class Example {
public static void main(String[] args) {
System.out.println("1到1000的完数有:");
for (int i=1; i < 1000; i++){
int t = 0;
for (int j=1; j <= i/2; j++){
if(i % j == 0){
t = t + j;
}
}
if(t == i){
System.out.print(i+" ");
}
}
}
}
相似回答