zoukankan      html  css  js  c++  java
  • java实现亲密数

    假设有 a、b 两个数,若 a 的所有因子之和等于 b,b 的所有因子之和等于 a,
    并且 a 不等于 b,则称 a 和 b 是一对亲密数。如 284 和 220 就是一对亲密数。
    分析:
    若要找出 10000 以内的亲密数,可使用以下算法:
    (1)对每一个数 i,将其因子分解出来,并将因子保存到一个数组中,再将因子之和保存到变量 b1。
    (2)将因子之和 b1 再进行因子分解,并将因子保存到一个数组中,将因子之和保存到变量 b2 中。
    (3)若 b2 等于 i,并且 b1 不等于 b2,则找到一对亲密数为 i 和 b1,可将其输出。
    (4)重复步骤(1)~(3),即可找出指定范围的亲密数。

    /*
    
    */
    package Question40_49;
    import java.util.Iterator;
    import java.util.LinkedHashSet;
    84
    import java.util.Scanner;
    import java.util.Set;
    import java.util.Vector;
    public class Question48 {
    public static int obtain(int n) {
    int sum = 0;
    for (int i = 1; i < n; i++) {
    if (n % i == 0) {
    sum += i;
    }
    }
    return sum;
    }
    public static void main(String[] args) {
    Scanner scanner = new Scanner(System.in);
    int n = scanner.nextInt();
    Set<Set<Integer>> sets = new LinkedHashSet<Set<Integer>>();
    for (int i = 1; i <= n; i++) {
    int t = obtain(i);
    if (i != t) {
    if (obtain(t) == i) {
    Set<Integer> set = new LinkedHashSet<Integer>();
    set.add(i);
    set.add(t);
    sets.add(set);
    }
    }
    }
    for (Iterator iterator = sets.iterator(); iterator.hasNext();) {
    Set<Integer> set = (Set<Integer>) iterator.next();
    for (Iterator iterator2 = set.iterator(); iterator2.hasNext();) {
    Integer integer = (Integer) iterator2.next();
    System.out.print(integer);
    if (iterator2.hasNext() == false) {
    System.out.println();
    } else {
    System.out.print(" ");
    }
    }
    }
    85
    }
    }
    
    

    运行结果:
    10000
    220 284
    1184 1210
    2620 2924
    5020 5564
    6232 6368

  • 相关阅读:
    Java 条件语句
    Java循环
    Java 变量
    Java 数据类型
    nginx+php发布网站
    安装MySQL5.7
    docker-compose参数
    部署
    dockerfile编写
    在VMware中安装CentOS7
  • 原文地址:https://www.cnblogs.com/a1439775520/p/13076839.html
Copyright © 2011-2022 走看看