问题标签 [perfect-numbers]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
1803 浏览

java - 丰富的总和,逻辑

我一直在解决下面的问题,但我得到了错误的答案。我的逻辑有什么问题?

完美数是一个数,其真因数之和正好等于该数。例如,28 的适当因数之和为 1 + 2 + 4 + 7 + 14 = 28,这意味着 28 是一个完美数。

一个数 n 如果其真因数之和小于 n 则称为不足数,如果该数之和超过 n 则称为丰富数。

由于 12 是最小的丰度数,1 + 2 + 3 + 4 + 6 = 16,所以可以写成两个丰度数之和的最小数是 24。通过数学分析可以证明,所有大于28123 可以写成两个丰富数之和。但是,即使已知不能表示为两个丰富数之和的最大数小于此上限,也无法通过分析进一步降低此上限。

找出所有不能写成两个丰富数之和的正整数之和。

这是我的代码:

我这里的逻辑有问题吗?不是所有可以定义为两个丰富数之和的整数都变成0吗?

0 投票
7 回答
7428 浏览

java - 完美数法

这个程序应该接受用户输入并确定它是否是一个完美的数字。当我尝试编译它时,我得到错误 Method testPerfect in class scalvert_Perfect cannot be applied to given types;

  • 测试完美(数字);
  • 必需:int,int
  • 发现:int
  • 原因:实际参数列表和形式参数列表的长度不同

我的代码:

0 投票
3 回答
2053 浏览

c++ - Project Euler #23,在程序中找不到问题

链接:http ://projecteuler.net/problem=23

完美数是一个数,其真因数之和正好等于该数。例如,28 的真因数之和为 1 + 2 + 4 + 7 + 14 = 28,这意味着 28 是一个完美数。

一个数 n 如果其真因数之和小于 n 则称为不足数,如果该数之和超过 n 则称为丰富数。

由于 12 是最小的丰度数,1 + 2 + 3 + 4 + 6 = 16,所以可以写成两个丰度数之和的最小数是 24。通过数学分析,可以证明所有大于28123 可以写成两个丰富数之和。但是,即使已知不能表示为两个丰富数之和的最大数小于该上限,也无法通过分析进一步降低该上限。

找出所有不能写成两个丰富数之和的正整数之和。


问题的答案是4179871,我的程序显示3797954。

首先,我创建了一个函数,用 28124 以下的所有丰富数字填充数组丰富[]。这非常好,因为我搜索了丰富的数字,它们与我的数组完全匹配。

其次,我有另一个包含所有数字 1-28123 的数组,我假设所有这些“不能写成两个丰富数字的总和”。这些都被写入数组hold[]。

最后,我去掉了可以写成两个丰富数字之和的数字,方法是将丰富[]中的所有数字与丰富[]中的所有数字相加,并将保持[]的值设置为0。(保持[丰富[0 to n]+abundant[0 to n]] = 0) 把所有剩余的数加到hold[]中,我只得到3797954

我知道这个程序效率不高,因为它将所有丰富的数字添加到所有丰富的数字中,但它应该可以正常工作。它出什么问题了?


0 投票
2 回答
1568 浏览

c++ - 为什么我会收到错误“浮点异常”?

我正在尝试编写一个找到低于用户输入的完美数字的代码。正确输出示例:

输入一个正整数:100
6 是完美数
28 是完美数
没有小于或等于 100 的完美数

但是当我运行我的代码时,我得到了错误Floating point exception

并且不知道为什么。我究竟做错了什么?

这是我的代码:

0 投票
3 回答
379 浏览

python-2.7 - 打开与程序相关的文件是否也会停止程序?

我有一个应该搜索完美数字的程序。(如果除以 X 的所有数字的总和除以 2 等于 X,则 X 是完美数)
sum/2 = x

现在它找到了前四个,它们在古希腊就为人所知,所以它并不是什么了不起的东西。

下一个应该是 33550336。

我知道这是一个很大的数字,但是程序已经运行了大约 50 分钟,仍然没有找到 33550336。

是因为我在程序运行时打开了存储所有完美数字的 .txt 文件,还是因为我没有足够快的 PC 来运行它*,还是因为我使用的是 Python?

*注意:这台 PC 在 10 分钟内分解了 500 000(同时还运行完美的数字程序和带有 3 个 YouTube 标签的 Google Chrome),也使用 Python。

这是程序的代码:

0 投票
3 回答
2229 浏览

c# - Lucas Lehmer 优化

我一直在努力使用 C# 代码优化 Lucas-Lehmer 素数测试(是的,我正在使用 Mersenne 素数来计算完美数。我想知道当前代码是否可以进一步提高速度。我使用System.Numerics.BigInteger 类来保存数字,也许它不是最聪明的,我们会看到它。

这段代码实际上是基于发现的情报:http ://en.wikipedia.org/wiki/Lucas%E2%80%93Lehmer_primality_test

这个页面(在时间戳)部分,给出了一些优化划分的证据。

LucasTest 的代码是:

}

编辑: 这比使用下面的Mare Infinitus 建议的 BigInteger 类中的 ModPow 更快。该实现是:

}

LucasLehmerMod 方法实现如下:

我害怕的是,当使用 .NET 框架中的 BigInteger 类时,我会被他们的计算所束缚。这是否意味着我必须创建自己的 BigInteger 类来改进它?或者我可以像这样使用 KaratsubaSquare(源自 Karatsuba 算法)来维持,我在Optimizing Karatsuba Implementation上发现了什么:

所以基本上,我想看看是否可以通过优化 for 循环来改进 Lucas-Lehmer 测试方法。但是,我有点卡在那里......甚至可能吗?

当然欢迎任何想法。

一些额外的想法:

我可以使用多个线程来加快计算找到完美数字的速度。但是,我(还)没有良好的分区经验。我将尝试解释我的想法(还没有代码):

首先,我将使用 Erathostenes 的筛子生成一个primtable。在 2 - 100 万个单线程范围内找到素数大约需要 25 毫秒。

C# 提供的功能非常惊人。将 PLINQ 与 Parallel.For 方法一起使用,我几乎可以同时运行多个计算,但是,它将 primeTable 数组分块为搜索不考虑的部分。

我已经发现线程的自动负载平衡不足以完成这项任务。因此,我需要尝试一种不同的方法,通过根据梅森数划分负载平衡来找到并使用它来计算完美数。有没有人有这方面的经验?这个页面似乎有点帮助:http ://www.drdobbs.com/windows/custom-parallel-partitioning-with-net-4/224600406

我会进一步调查。

至于现在,我的结果如下。我当前的算法(使用 C# 中的标准 BigInteger 类)可以在我的笔记本电脑(具有 4 核和 8GB 的​​ Intel I5)上 5 秒内找到前 17 个完美数字(参见http://en.wikipedia.org/wiki/List_of_perfect_numbers )内存)。但是,然后它卡住了,在 10 分钟内什么也没找到。

这是我还无法匹配的东西......我的直觉(和常识)告诉我应该研究 LucasLehmer 测试,因为计算第 18 个完美数的 for 循环(使用 Mersenne Prime 3217)将运行 3214 次。估计还有改进的余地...

Dinony 在下面发布的建议是用 C 完全重写它。我同意这会提高我的性能,但是我选择 C# 来找出它的局限性和好处。由于它被广泛使用,而且它能够快速开发应用程序,我觉得它值得一试。

不安全的代码在这里也能带来好处吗?

0 投票
1 回答
836 浏览

math - 欧拉计划 #23 - 这是什么意思?

http://projecteuler.net/problem=23

我不是在寻找答案。但有人可以解释一下这是什么意思吗?

由于 12 是最小的丰度数,1 + 2 + 3 + 4 + 6 = 16,所以可以写成两个丰度数之和的最小数是 24。

如果 12 是最小的丰富数,为什么 24 是最小的丰富数,可以写成 2 个丰富的数字之和?

问题文本

完美数是一个数,其真因数之和正好等于该数。例如,28 的适当因数之和为 1 + 2 + 4 + 7 + 14 = 28,这意味着 28 是一个完美数。

一个数 n 如果其真因数之和小于 n 则称为不足数,如果该数之和超过 n 则称为丰富数。

由于 12 是最小的丰度数,1 + 2 + 3 + 4 + 6 = 16,所以可以写成两个丰度数之和的最小数是 24。通过数学分析,可以证明所有大于28123 可以写成两个丰富数之和。但是,即使已知不能表示为两个丰富数之和的最大数小于该上限,也无法通过分析进一步降低该上限。

找出所有不能写成两个丰富数之和的正整数之和。

0 投票
2 回答
939 浏览

c - `if (variable % 2 == 0)` 时程序崩溃

我正在编写一个找到完美数字的程序。在阅读了这些完美数字后,我发现了它们的列表:完美数字列表。目前的输出是:

我决定创建数组并将其与数字放在一起,将数字完全除以(没有其余部分)。所以我将能够通过添加数组的所有元素来验证它是否是一个完美的数字。但是应用程序崩溃了,我不明白为什么:

0 投票
6 回答
7232 浏览

c# - C#完美数字练习

你能帮我做以下练习吗?(这不是家庭作业,只是我正在使用的书中的一个练习。)

“如果整数的因数(包括一个(但不包括数字本身))与该数字相加,则称其为完美数。例如,6 是一个完美数,因为 6 = 1 + 2 + 3。编写方法 Perfect判断参数值是否为完美数。在判断并显示2到1000之间的所有完美数的应用中使用此方法。显示每个完美数的因数,以确认该数字确实是完美的。

所以这是我到目前为止得到的:

你会怎么做?我的代码可以修复吗?你会怎么解决?谢谢!

我在 myList[counter] = j 行出现错误;(索引超出范围)而且它没有像它应该显示的那样显示完美的数字....

编辑 = 我做了一些改变;

现在我可以循环遍历所有数字,直到 1000 并显示它是否完美(真或假)[这不是练习所要求的,但这是朝着正确方向迈出的一步(练习说它应该显示只有完美的数字)]。

无论如何,奇怪的是它在第 24 位上说的是真的,这不是一个完美的数字.... http://en.wikipedia.org/wiki/Perfect_numbers#Examples

为什么 24 不同?

非常感谢

0 投票
2 回答
669 浏览

c# - 需要一些帮助来完成 C# 中的完美数字练习

(这不是作业,只是我正在使用的书中的一个练习)

“如果整数的因数(包括一个(但不包括数字本身))与该数字相加,则称其为完美数。例如,6 是一个完美数,因为 6 = 1 + 2 + 3。编写方法 Perfect判断参数值是否为完美数。在判断并显示2到1000之间的所有完美数的应用中使用此方法。显示每个完美数的因数,以确认该数字确实是完美的。

问题是它显示完美数字两次而不是一次。为什么要这样做?