问题标签 [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 投票
3 回答
4075 浏览

prolog - 查找 1 到 100 之间的完美数字

如何生成 1 到 100 之间的所有完美数字?

完美数是一个正整数,等于它的真除数之和。例如,6(=1+2+3) 是一个完美数。

0 投票
5 回答
3576 浏览

c++ - C++ 完美数。需要一些帮助修改

我需要一些帮助来修改这个。它只显示0s作为温度。谢谢你。

0 投票
7 回答
4751 浏览

c# - 寻找完美数字(优化)

作为编程挑战的一部分,我用 C# 编写了一个程序来查找一定范围内的完美数字。但是,我意识到计算超过 10000 的完美数字时非常慢。是否有任何优化方法可以找到完美数字?我的代码如下:

0 投票
4 回答
2905 浏览

c++ - 决定一个数字是完美的还是素数

问题是:“编写一个函数来确定一个数字是质数还是完美数。”

到目前为止,我首先完成了完美的部分,这就是我所拥有的:

但是,此代码似乎有错误。我看过这本书,但没有谈到这个话题。我想获得有关如何修复此代码的建议。

谢谢!

0 投票
4 回答
5648 浏览

c - C中的完美数

我需要编写一个 C 程序来找到完美数..

if(!(num%i)) - 这是我不明白的d线。

如果还有其他简单的方法请建议我

0 投票
5 回答
522 浏览

performance - 寻找好的奖金测验来测试效率(特别是与时间相关的效率)

我每周做一次计算机科学入门实验室。我希望在下一个实验室结束时能有一场快速的比赛。我想给他们这样的代码块:

他们将实现 doSomething 方法,代码最快的人将获得少量奖励分数。

问题是问题需要简单一些。学生们很好地掌握了:循环、if/else、字符串、加法、数组等。

以下是我对问题可能的想法:

  • 找出 1 到 1,000,000 之间的所有完美数字。(一个完美的数字是一个数字,其中所有数字的因素加起来就是这个数字。即:6 = 3 + 2 + 1)
  • 找出 1 到 1,000,000 之间的所有素数

我认为为了使方法之间的性能存在可衡量的差异,您必须多次执行某些操作。

0 投票
8 回答
9927 浏览

java - 完美数字 1 到 n

编写一个算法,打印从 1 到 n 的完美数。确定一个数是否完美,将小于该数的所有因数相加。如果总和等于数字,那就完美了。

输出:24

什么都没有打印出来。不知道怎么回事。我哪里错了?我只能使用 while、for 和 else-if 语句。

0 投票
4 回答
24807 浏览

algorithm - 检查一个数字是否是一个完美数字的算法

我正在寻找一种算法来确定给定数字是否是完美数字。

我想到的最简单的是:

  1. 找出数字的所有因数
  2. 获取素数[除了数字本身,如果它是素数]并将它们相加以检查它是否是一个完美的数字。

有一个更好的方法吗 ?。在搜索中,出现了一些 Euclids 工作,但没有找到任何好的算法。这个 Golfscript 也没有帮助:https ://stackoverflow.com/questions/3472534/checking-whether-a-number-is-mathematically-a-perfect-number 。

数字等可以在现实世界的使用中被缓存等[我不知道在哪里使用完美的数字:)]
但是,由于这是在采访中被问到的,我假设应该有一种“可推导”的优化方式。

谢谢 !

0 投票
4 回答
1025 浏览

f# - F# Power 问题,它接受两个参数都是 bigints

我目前正在尝试使用 F#。在 Internet 上找到的文章很有帮助,但作为 C# 程序员,我有时会遇到一些情况,我认为我的解决方案会有所帮助,但它没有或只是部分帮助。

所以我对 F#(很可能是编译器的工作原理)缺乏了解,这可能是我有时完全惊呆的原因。

例如,我编写了一个 C# 程序来确定完美数。它使用已知形式的欧几里得证明,完美数可以由梅森素数 2p-1(2p-1) 形成(其中 2p-1 是素数,p 表示为的幂)。

由于 F# 的帮助表明 '**' 可用于计算幂,但使用浮点数,因此我尝试使用位移运算符 (<<<) 创建一个简单的函数(请注意,我已编辑此代码指出需要):

但是,在运行测试并寻求性能改进时,我还尝试了一种我记得使用 Miranda(也是一种函数式编程语言)的形式,它使用递归和模式匹配器来计算功率。主要的好处是我可以将变量y用作 64 位整数,这是标准位移运算符无法实现的。

事实证明,这个函数实际上更快,但我(还)无法理解原因。也许这是一个不那么理智的问题,但我仍然很好奇。

那么第二个问题是,在计算完美数字时,您会遇到这样一个事实,即 int64 在找到第 9 个完美数字(由 31 的幂形成)后无法显示交叉的大数字。我试图找出你是否可以使用 BigInteger 对象(或 bigint 类型),但在这里我对 F# 的了解有点阻碍我。是否可以创建一个接受两个参数都是 bigints 的 powerfunction?

我目前有这个:

但它会抛出一个错误,即 bigint.Zero 未定义。所以我在那里也做错了什么。0I 不被接受作为替代品,因为它给出了这个错误:

但是模式匹配器不能使用'when'语句。有另一种解决方案吗?

在此先感谢,请原谅我的长帖子。我只是想尽可能清楚地表达我的“挑战”。

0 投票
2 回答
831 浏览

f# - 计算完美数时的 F# 并行化问题?

我正在尝试优化一个从给定指数计算完美数字的小程序。

该程序(几乎)完美运行,但是当我打开任务管理器时,它仍然在单个线程上运行。这意味着我一定做错了什么,但我对 F# 的了解仍处于“开始”阶段。

我会尽量把这个问题说清楚,但如果我没有这样做,请告诉我。

完美数是所有除数之和(除数字本身)等于数字本身的数字(例如,6 是完美的,因为它的除数 1、2 和 3 的总和是 6)。

我使用素数来加快计算速度,也就是说我对存储所有除数的(巨大的)列表不感兴趣。为此,我使用欧几里得证明是正确的公式: (2*(num - 1)) * ( 2* (num - 1)) 其中后者是梅森素数。我使用了来自stackoverflow(@Juliet)的一个非常快速的算法来确定给定的数字是否是素数。

当我在网上阅读了几篇文章(我还没有买一本好书,真丢脸)时,我发现序列比列表表现更好。所以这就是为什么我首先开始创建一个生成完美数字序列的函数:

辅助函数 PowShift 实现如下:

我使用位移运算符,因为所有功率计算的基础都是从 2 开始的,因此这可能是一种简单的方法。当然,我仍然很感谢我在以下问题上提出的问题的贡献:F# Power 问题,它接受两个参数都是 bigints> F# Power 问题,它接受两个参数都是 bigints

Juliet 创建的函数(这里借用)如下:

使用此代码,无需并行,在我的笔记本电脑上大约需要 9 分钟才能找到第 9 个完美数字(由 37 位数字组成,可以找到指数值为 31)。由于我的笔记本电脑有一个带有两个内核的 CPU,并且只有一个以 50% 的速度运行(一个内核的满载),我认为我可以通过并行计算结果来加快计算速度。

所以我改变了我的完美数字功能如下:

为了调用这个函数,我使用了一个小的辅助函数来运行它:

异步计算的结果被忽略,因为我在 perfectNumbersAsync 函数中显示它。

上面的代码编译并运行,但它仍然只使用一个内核(尽管在计算第 9 个完美数时它运行速度快了 10 秒)。恐怕它与辅助函数 PowShift 和 isPrime 有关系,但我不确定。我是否必须将这些辅助函数的代码放在 perfectNumbersAsync 的异步块中?它不会提高可读性...

我玩 F# 的次数越多,我就越学会欣赏这种语言,但在这种情况下,我有时需要一些专家 :)。

提前感谢您阅读本文,我只希望我让自己有点清楚......

罗伯特。