java - java 中的项目 euler 23 - 接近解决方案

标签 java math

我已经研究这个问题有一段时间了,我相信我的方法会起作用。我通过两种不同的求和方法得到了当前的答案 4190404。在数字 21(友好数字)中,我使用相同的算法对数字的除数进行求和,这让我确信它可以正常工作。我查看了博客寻求指导,但一无所获。如果有人能指出我正确的方向,我将非常感激。

import java.util.ArrayList;

public class problem23 {

public static void main(String[] args) {

    int upperLimit = 28123;
    long sum = 0;

列出我的上限以下的所有丰富数字

    ArrayList<Long> abunNums =  new ArrayList<Long>();
    abunNums.add((long) 0);

    for (long i = 1; i <= upperLimit; i++)
        if (isAbundant(i)) 
            abunNums.add(i);

boolean 数组。 true 索引是两个丰富数字的总和,否则 false

    boolean[] isSumOfAbun = new boolean[upperLimit+1];

    int j = 0;
    for (int i = 1; i < abunNums.size(); i++) {
        j = i;
        while (abunNums.get(i) + abunNums.get(j) <= upperLimit) {
            isSumOfAbun[(int) (abunNums.get(i) + abunNums.get(j))] = true;
            j++;
        }
    }

//如果数字不能被描述为两个丰富数字的和,则循环遍历 boolean 数组 and 以及总和的索引

    for (int i = 1; i <= upperLimit; i++) 
        if (!isSumOfAbun[i]) {
            sum += i;
            System.out.println(i);
        }

    System.out.println(sum);


}

测试数字是否丰富的方法

public static boolean isAbundant(long n) {

    long val = 1;
    for (int i = 2; i*i < n; i++)
        if (n % i == 0) {
            if (i == n/i)
                val += i;
            else
                val += i + (n/i);
        }

    if (val > n)
        return true;

    return false;
    }
}

最佳答案

我不太确定出了什么问题,但我有一种感觉 isAbundant 错了。尝试使用此版本。

public static boolean isAbundant(long n) {
    long val = 1;
    for (int i = 2; i*i <= n; i++)
        if (n % i == 0)
            val += i;
        return val == n;
}

关于java - java 中的项目 euler 23 - 接近解决方案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50204452/

相关文章:

java - 如何在 Java 中为 ScrollPane 和 TextPane 提供 TabPane

math - CGAL 3.4 : How do I get end vertex co-ordinates from a Finite_edges_iterator?

c++ - 我们如何计算 N choose K modules a prime number 而不会溢出?

list - 比较 Mathematica 中的两个列表

algorithm - Delphi 中的数学表达式解析器?

java - 如何使用反射获取方法的参数

java - 去掉字符串中的引号

java - 使用 PDFBox 旋转多个形状的问题

java - 根据执行历史记录,给定指令的操作数堆栈大小是否会有所不同?

algorithm - 选择 n 个固定和的数字