Engee 文档
Notebook

有吸引力的数字

这个例子显示了一个算法的实现,用于寻找有吸引力的数字从1到120.

导言

"有吸引力的数字"的算法是一个奇怪的数学问题,涉及确定自然数,其质因数的总和是质数。

什么是因子分解?

每个自然数可以表示为素数(因子)的乘积。 例如:

-数字12有素数因素 ,或基于学位的记录 — .

功能 factor 在Julia中,它完全像这样分解输入数字。

"吸引人"这个数字是什么意思?

当所有的总和其独特的素数因子(而不考虑程度)是素数时,一个数字被认为是有吸引力

让我们解释一下:

  1. 对于数字12:因式分解→[2,3]? 总和=2+3=5。
  2. 由于5是素数,因此12是一个有吸引力的数字。

我们需要找到从1到120范围内的所有这些数字。

解决问题

安装所需的软件包

In [ ]:
import Pkg; Pkg.add("Primes")

连接模块 Primes. 它提供了处理素数的函数,例如, isprime() 检查一个数字是否为素数

In [ ]:
using Primes

功能 isattractive(n) 接受正整数 n,则:

  • factor(n) -我们得到了一本带学位的素数除数字典

  • values(...) -我们只取值(忽略度)

  • sum(...) -把价值加起来

  • isprime(...) -我们是否检查这个金额是否简单?

In [ ]:
function isattractive(n)
    return isprime(sum(values(factor(n))))
end
Out[0]:
isattractive (generic function with 1 method)

功能 printattractive(m, n):

-接受两个参数-范围的边界 m 以前 n

-使用函数对m:n数组进行滤波 isattractive()

-通过以下方式输出格式精美的数字列表 println()

In [ ]:
function printattractive(m, n)
    println("Привлекательные числа от $m до $n:\n", filter(isattractive, m:n))
end
Out[0]:
printattractive (generic function with 1 method)

运行计算,调用上面创建的具有指定范围的函数。

In [ ]:
printattractive(1, 120)
Привлекательные числа от 1 до 120:
[4, 6, 8, 9, 10, 12, 14, 15, 18, 20, 21, 22, 25, 26, 27, 28, 30, 32, 33, 34, 35, 38, 39, 42, 44, 45, 46, 48, 49, 50, 51, 52, 55, 57, 58, 62, 63, 65, 66, 68, 69, 70, 72, 74, 75, 76, 77, 78, 80, 82, 85, 86, 87, 91, 92, 93, 94, 95, 98, 99, 102, 105, 106, 108, 110, 111, 112, 114, 115, 116, 117, 118, 119, 120]

结论

使用这个例子,我们已经学会了如何使用Julia编程语言的功能解决一个关于"有吸引力"数字的有趣数学问题。 我们:

-你学会如何使用图书馆了吗? Primes 用于处理素数;
-使用内置功能 factor()Base.Math (标准库的一部分);
-我们写了一个函数,检查一个数字是否有吸引力;
-实现了在终端中显示结果的便捷方式。

这种方法展示了Julia代码的优雅和可读性,特别是在结合强大的内置工具和简洁的语法时。

该示例是使用[罗塞塔代码]的材料开发的(https://rosettacode.org/wiki/Attractive_numbers