循环-23. 找完数(20)

来源:互联网 发布:Centos mysqldb安装 编辑:程序博客网 时间:2024/05/22 17:38
题目来源:

所谓完数就是该数恰好等于除自身外的因子之和。例如:6=1+2+3,其中1、2、3为6的因子。本题要求编写程序,找出任意两正整数m和n之间的所有完数。

输入格式:

输入在一行中给出2个正整数m和n(0<m<=n<=10000),中间以空格分隔。

输出格式:

逐行输出给定范围内每个完数的因子累加形式的分解式,每个完数占一行,格式为“完数 = 因子1 + 因子2 + ... + 因子k”,其中完数和因子均按递增顺序给出。

输入样例:

1 30

输出样例:

1 = 16 = 1 + 2 + 328 = 1 + 2 + 4 + 7 + 14

超时解:

import java.text.DecimalFormat;import java.util.ArrayList;import java.util.Scanner;public class Main {  public static void main(String[] args)  {    Scanner scanner = new Scanner(System.in);        //整数 m,n  0<m<=n<=10000    int m =  scanner.nextInt();    int n = scanner.nextInt();    int sum=0;    for(;m<=n;++m)    {      ArrayList<Integer> result = new ArrayList<Integer>();      sum =m;      if(m==1)        System.out.println("1 = 1");      else      {        for(int i=1;i<=m/2 ;i++)        {                      if(m%i==0)          {            sum = sum-i;            result.add(i);          }                    }        if(sum==0)        {          System.out.print(m);          System.out.print(" =");          for(int i=0;i<result.size();i++)          {            System.out.print(" "+result.get(i));            if(i<result.size()-1)            {              System.out.print(" +");            }          }          System.out.println("");                  }        result = null;                }              }                    }  }          



正确解:

import java.text.DecimalFormat;import java.util.ArrayList;import java.util.Scanner;public class Main {public static void main(String[] args){Scanner scanner = new Scanner(System.in);//整数 m,n  0<m<=n<=10000int m =  scanner.nextInt();int n = scanner.nextInt();int sum=0;for(;m<=n;++m){ArrayList<Integer> result = new ArrayList<Integer>();sum =1;if(m==1)System.out.println("1 = 1");else{//先求因子和for(int j=2;j<=Math.sqrt(m);j++){if(m%j==0){sum = sum+j;int temp = m/j;if(temp  >j && temp<m){sum= sum+temp;}}}//如果因子和等于 m,是完数if(sum!=m){continue;}//找因子for(int i=1;i<=m/2 ;i++){if(m%i==0){result.add(i);}}System.out.print(m);System.out.print(" =");for(int i=0;i<result.size();i++){System.out.print(" "+result.get(i));if(i<result.size()-1){System.out.print(" +");}}System.out.println("");result = null;}}}}              

参考:http://blog.csdn.net/rabbit8848/article/details/38552991

0 0