题目描述

一个数如果恰好等于它的因子之和,这个数就称为"完数"。 例如,6的因子为1、2、3,而6=1+2+3,因此6是"完数"。 编程序找出N之内的所有完数,并按下面格式输出其因子。

输入描述

N

输出描述

? its factors are ? ? ?

样例

输入:


输出:

6 its factors are 1 2 3
28 its factors are 1 2 4 7 14
496 its factors are 1 2 4 8 16 31 62 124 248 

======================================================第一次code:
 import java.util.*;

 public class HelloWorld
  {
      public static void main(String[] args)
      {
          Scanner input = new Scanner(System.in);
          int n = input.nextInt();
          start(run(n));
      }    /**    *  求n以内的所有数的因数    *  每个数的所有因数以逗号为分隔,存到一个字符串数组    *  将所有数的因数集存到一个字符串中    */
      public static String[] run(int n)
      {
          String a="",c="";
          String [] b = new String[n+1];
          for(int i=1;i<n+1;i++)
          {
              for(int j=1;j<i;j++)
              {
                  if(i % j ==0)
                  {
                      a=String.valueOf(j)+",";
                      c +=a;
                  }
              }
              b[i] = c;
              c="";
          }
          return b;
      }     /**     *  将字符串以逗号为分界,切割成数组     *  对数组和数组的下标进行比较     *  如果匹配成功,则输出结果     */
      public static void start(String[] b)
      {
          for(int i=2;i<b.length;i++)
          {
              String[]c=b[i].split(",");
              int x = 0;
              String o,w="";
              int [][] a = new int[b.length][c.length];
              for(int k=0;k<c.length;k++)
              {
                  a[i-2][k]=Integer.parseInt(c[k]);
                  x += a[i-2][k];
              }
              if(x==i)
              {
                  for(int k=0;k<c.length;k++)
                  {
                      o = String.valueOf(a[i-2][k]);
                      w +=(" "+o);
                  }
                  System.out.println(i+" its factors are"+w);
              }
          }
      }
  }

测试结果显示,求1000的完数,耗费时间为76毫秒;求2000以内的完数,所耗时间为251毫秒;求10000以内的完数,所耗时间为6195毫秒。

时间效率不高,必须得提高。


码农谷 找出N之内的所有完数的更多相关文章

  1. 找出N之内的所有完数

    时间限制: 10 Sec  内存限制: 128 MB 提交: 389  解决: 148 [提交][状态][讨论版] 题目描述 一个数如果恰好等于它的因子之和,这个数就称为"完数". ...

  2. 代码实现:一个数如果恰好等于它的因子之和,这个数就称为"完数"。例如6=1+2+3.第二个完全数是28, //它有约数1、2、4、7、14、28,除去它本身28外,其余5个数相加, //编程找出1000以内的所有完数。

    import java.util.ArrayList; import java.util.List; //一个数如果恰好等于它的因子之和,这个数就称为"完数".例如6=1+2+3. ...

  3. python基础练习题(题目 一个数如果恰好等于它的因子之和,这个数就称为"完数"。例如6=1+2+3.编程找出1000以内的所有完数)

    day12 --------------------------------------------------------------- 实例019:完数 题目 一个数如果恰好等于它的因子之和,这个 ...

  4. 一个数如果恰好等于它的因子之和,这个数就称为 "完数 "。例如6=1+2+3.编程     找出1000以内的所有完数。

    package a; public class Wanshu { public static void main(String[] args) { for (int i = 1; i <= 10 ...

  5. 【Python3练习题 014】 一个数如果恰好等于它的因子之和,这个数就称为“完数”。例如6=1+2+3。编程找出1000以内的所有完数。

    a.b只要数字a能被数字b整除,不论b是不是质数,都算是a的因子.比如:8的质因子是 2, 2, 2,但8的因子就包括 1,2,4. import math   for i in range(2, 1 ...

  6. javascript 找出数字数组中最大的数

    找出数字数组中最大的数 var Match = (function(){ var arr = null; var len = 0; return { max:function(arr,len){ ar ...

  7. 从数组中找出所有组合为s的数

    java版本 package numCombine; /** * 从数组中找出所有组合为s的数 * @author root * */ public class NumComberAll { publ ...

  8. 利用快速排序原理找出数组中前n大的数

    #include <stdio.h> #include <stdint.h> #include <stdlib.h> #define MAX_SIZE 400001 ...

  9. 找出数组前N大的数

    这个题也是个比较有名的面试题.当然有很多变种. 题目意思基本是:从一个数据量很大的数组里找前N大的元素.不允许排序. 这个题有两个比较好的思路: 思路一:用快速排序的思想,是思想,不是要排序; 思路二 ...

随机推荐

  1. Ubuntu Command-Line: Enable Unlimited Scrolling in the Terminal

    At times when using the terminal, the output from a command can be so long, you simply can’t scroll ...

  2. hibernate的数据库乱码问题

    <?xml version="1.0" encoding="UTF-8"?><!DOCTYPE hibernate-configuration ...

  3. nginx+gunicorn+supervisor+flask @ centos

    /etc/nginx/conf.d/default.conf server { listen 80 default_server; server_name 127.0.0.1; #charset ko ...

  4. 学习笔记:HSB、HSL

    转自知乎:http://www.zhihu.com/question/22077462 HSB 为 色相,饱和度,明度, HSL 为 色相,饱和度,亮度, HSV 为色相,饱和度,明度. HSB 和 ...

  5. IOS7 SDK 几宗罪

    IOS7 app 默认是全屏模式,所以之前的程序窗口会上向移动到状态栏上面,所以在底边会有一条大白边 表格单元格,默认是白色背景,之前程序设置的透明效果,这里不在起作用,需要用下面的委托方法改变.- ...

  6. sed详细分析

    [一.简单描述] sed命令类似命令行的文本编辑器,以行为单位(见注1).除非带命令i(in-place)否则源文件内容并不会被更新.   [二.使用] [2.1.使用方式] 存在两种使用方式: 1. ...

  7. 重新安装配置ubuntu的引导菜单

     查看分区挂在情况,找到ubuntu所在分区(boot)$sudo fdisk   -l   卸载isodevice镜像设备所在盘分区(boot) $sudo  umount  -l  /isodev ...

  8. SVD

    SVD分解(奇异值分解),本应是本科生就掌握的方法,然而却经常被忽视.实际上,SVD分解不但很直观,而且极其有用.SVD分解提供了一种方法将一个矩阵拆分成简单的,并且有意义的几块.它的几何解释可以看做 ...

  9. git新建仓库

    克隆地址 git clone https://git.oschina.net/dy09/dy_shop.git 在克隆下来的文件夹里面进行下面的操作1.git add -A 2.git commit ...

  10. maven 几个插件的使用

    1.  compile <plugin> <artifactId>maven-compiler-plugin</artifactId> <configurat ...