给定n个数字的数组,用[2,250]范围内最远的互质替换每个元素。例如,2的最远互质是249,而243是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最远的候选人。