Java 中的 Fibodiv 数

2024年9月10日 | 阅读 6 分钟

一个数字 N,它可以被分成两部分 f1 和 f2,使得如果我们取 f1 和 f2 作为斐波那契数列的前两项,那么斐波那契数列中的某一项就是数字 N 本身。让我们通过一些例子来理解它。

示例 1

N = 14

这里,数字 14 可以被分成两部分,1 和 4。所以,斐波那契数列的前两项是 f1 = 1 和 f2 = 4。因此,数列变成

1, 4, 5 (1 + 4), 9 (4 + 5), 14 (5 + 9), 23 (9 + 14)

上面的数列包含数字 14。因此,14 是一个 fibodiv 数字。

示例 2

N = 15

这里,数字 15 可以被分成两部分,1 和 5。所以,斐波那契数列的前两项是 f1 = 1 和 f2 = 5。因此,数列变成

1, 5, 6 (1 + 5), 11 (5 + 6), 17 (6 + 11), 28 (11 + 17)

上面的数列不包含数字 15。因此,15 不是一个 fibodiv 数字。

示例 3

N = 1292

这里,数字 1292 可以被分成两部分 129 和 2。所以,斐波那契数列的前两项是:f1 = 129 和 f2 = 2。因此,数列变成

129, 2, 131 (129 + 2), 133 (2 + 131), 264 (131 + 133), 397 (133 + 264), 661 (264 + 397),

1058 (397 + 661), 1719

上面的数列不包含数字 1291。现在,我们将 1292 分成另外两部分 12 和 92。所以,斐波那契数列的前两项是:f1 = 12 和 f2 = 92。因此,数列变成

12, 92, 104 (12 + 92), 196 (92 + 104), 300 (104 + 196), 496 (196 + 300), 796 (300 + 496),

1292 (496 + 796)。因此,1292 是一个 Fibodiv 数字。

算法

步骤 1:取一个数字 N。

步骤 2:将数字分成两部分,分别为 f1 和 f2,使得当我们把 f2 和 f1 连接起来时,得到数字 N。

例如:59 可以分成 5(f1 = 5)和 9(f2 = 9)。当我们把 9 附加到 5 后面时,我们得到数字 59。

步骤 3:将 f1 和 f2 作为斐波那契类数列的前两项。

步骤 4:通过将 f1 和 f2 相加来计算下一项(称为 f3),然后更新 f1 和 f2。F1 取 f2 的值,f2 取 f3 的值。

步骤 5:重复步骤 4,直到下一项 f3 超过数字 N,或者 f3 等于 N。

步骤 6:如果 f3 等于 N,则 N 是一个 Fibodiv 数字;否则,对不同的 f1 和 f2 值重复步骤 2(参见示例 3)。如果无法将数字 n 除以唯一的 f1 和 f2 值,则 n 不是 Fibodiv 数字。

Fibodiv 数字 Java 程序

让我们使用上面提到的算法来实现拔河问题。

使用迭代

文件名: FibodivNumber.java

输出

14 is a Fibodiv number.
19 is a Fibodiv number.
28 is a Fibodiv number.
47 is a Fibodiv number.
61 is a Fibodiv number.
75 is a Fibodiv number.

使用递归

文件名: FibodivNumber1.java

输出

14 is a Fibodiv number.
19 is a Fibodiv number.
28 is a Fibodiv number.
47 is a Fibodiv number.
61 is a Fibodiv number.
75 is a Fibodiv number.