我认为以顺序的方式解释这一挑战是最简单的。以输入数字N开头:
- 找到其最高素数
- 检查的上方和下方的数字Ñ,看看是否最高素因子较高(即,最高的素因子N-1和/或N + 1比的因数更高Ñ。
- 继续检查更高和/或较低的数字相邻Ñ在方向其中最高因素正在增加((N-2,N-3 ...)和/或(N + 2,N + 3,...)等上)
- 一旦在任一方向上没有任何高于我们已经发现的素数的素数,我们就会停止并输出遇到的最高素数。
让我们看一个例子:
245
有主要因素5, 7, 7
。它的邻居是:
244 -> 2, 2, 61
245 -> 5, 7, 7
246 -> 2, 3, 41
最高质数因子在两个方向上都在增加,因此我们必须查看下一个邻居:
243 -> 3, 3, 3, 3, 3
244 -> 2, 2, 2, 61
245 -> 5, 7, 7
246 -> 2, 3, 41
247 -> 13, 19
现在,最高质数因子在两个方向上都在减小,因此我们遇到的最高质数因子为61
,因此应返回。
另一个例子:
让我们来看看1024
。其主要因素是2, 2, 2, 2, 2, 2, 2, 2, 2, 2
。它最接近的邻居的主要因素是:
1023 -> 3, 11, 31
1024 -> 2, 2, 2, 2, 2, 2, 2, 2, 2, 2
1025 -> 5, 5, 41
最高的素数因子从2
到31
或在两个方向上都在增加41
。让我们看看邻居:
1022 -> 2, 7, 73
1023 -> 3, 11, 31
1024 -> 2, 2, 2, 2, 2, 2, 2, 2, 2, 2
1025 -> 5, 5, 41
1026 -> 2, 3, 3, 19
对于最高首要因素1022
就是73
,和最高的主要因素1026
是19
。由于19
低于41
我们对此不感兴趣。小于N的数字仍在增加,因此我们将朝该方向检查下一个:
1021 -> 1021
1022 -> 2, 7, 73
1023 -> 3, 11, 31
1024 -> 2, 2, 2, 2, 2, 2, 2, 2, 2, 2
1025 -> 5, 5, 41
1026 -> 2, 3, 3, 19
1021
是素数,也是我们遇到的最高素数,因此应将其返回。
规则:
- 您只会得到
N
大于1
和小于的正数2^31-2
。 - 输入和输出格式是可选的,但数字必须以10为底。
- 只要最大值朝那个方向增加,就应该继续搜索较高的素数。方向彼此独立。
测试用例:
格式: N, highest_factor
2, 3
3, 3
6, 7
8, 11
24, 23
1000, 997
736709, 5417
8469038, 9431
@ Pietu1998,这个问题现在更清楚了吗?
—
Stewie Griffin
N=2
实际上,由于1
没有素数因素,因此似乎是一个边缘情况,因此没有最大的素数可以与我们进行比较以确定我们是否应该继续。
2
N 的最高素因。然后得到5
N-1和61
N + 1。然后我们得到19
N-2和67
N + 2。我们应该继续尝试减少数字,19>5
还是因为5<61
?即最大值是否保持不变?(我不确定该示例在数学上是否可行。)