最远互质的算法

时间:2017-10-23 05:11:17

标签: algorithm primes

给定n个数字的数组,用[2,250]范围内最远的互质替换每个元素。例如,2的最远互质是249,而243是2。

有没有人能帮助我解决这个问题的最佳复杂算法?

2 个答案:

答案 0 :(得分:2)

由于数量范围很小,我会选择一些筛子。

        for (int i = 2; i <= N; ++i)
        {
            if (N % i == 0)
            {
                sieve[i] = 1;
                for (int j = 2; j * i <= 250; ++j)
                {
                    sieve[i * j] = 1;
                }
            }
        }

之后使用此功能,您将查找sm为0的最小值sieve[sm]以及lg为0的最大值sieve[lg]。 然后在它们之间得到N的距离最大。这是你的答案。

Sieve的复杂性为O(nloglogn)。找到最远的循环将是O(n)。总体复杂度为O(nloglogn)

背后的逻辑:

我们只是标记这个特定数字N不是共同素数的值。

然后我们只是循环以获得与给定数字互质的最小和最大数字。然后我们计算距离,然后将最大的距离作为答案。

答案 1 :(得分:1)

对于范围[2,250]中最远的N的互质,候选人是:

    如果N不能被2或5整除,则
  • 250是候选者。
  • 249是候选人。它是最优质的,所以它肯定与249以下的所有数字共同构成。
  • 最终候选者是N不能被整除的第一个素数(例如,对于N = 240,该素数是7)。无需在运行时计算从2到250的素数列表,但可以拼写为数组初始化。

在这些(最多)三名候选人中,选择离N最远的候选人。