【问题标题】:Maximum Sum of Factors of Numbers in a given Range给定范围内数字因子的最大和
【发布时间】:2016-12-13 10:23:49
【问题描述】:

这是我在一些在线评委平台上一直在做的一个问题。

求从 1 到 N 的数的最大因子和。

例如,如果 N 为 11,则答案将为 18。从 1 到 11 的因子之和最大的数字是 10 (1 + 2 + 5 + 10)。

我实现了一个看起来像筛子的相对简单的解决方案。 C++中的代码如下所示:

for (int i = 1; i <= 1000000; ++i {
    for (int j = i; j <= 1000000; j += i) {
        num[j] += i;
    }
    mx[i] = max(num[i], mx[i - 1]);
}

每当用户查询某个 N 时,我都会简单地输出 mx[N]。这个解决方案似乎是正确的。但是,对于较大的输入,它超过了时间限制(1s)。最大 N 为 1,000,000,但用户可以查询 1,000,000 个不同的 N 值。以上代码是运行一次的预处理代码。

上面代码的复杂度是N + N / 2 + N / 3 + ... + 1,我猜大概是N Log N。如何提高这段代码的复杂度?

感谢您的帮助。

【问题讨论】:

  • 考虑素数分解。
  • @AbdenaceurLichiheb 如果我要使用素数分解,那会不会太耗时?如果我错了,请纠正我,但使用素因数分解,我必须先找到一个数字的所有素因数,然后再计算因数之和。
  • 这个问题对于堆栈溢出来说太模糊了。有无限数量的可能答案。请将您的问题集中在代码的特定方面。
  • @xaxxon 请允许我编辑我的问题。
  • @AbdenaceurLichiheb 很抱歉,这个问题是由私人在线法官处理的。

标签: c++ algorithm data-structures number-theory factorization


【解决方案1】:

这个问题的答案是:Highly Abundant Number
您可以从这里获取序列:A002093

其实我查了一下,10^10以下的高丰度数都是41-smooth数,10^13以下是61-smooth数。
N-光滑数可以分解N以下的素数。
您可以像这个算法一样搜索 n-smooth 数(例如 10^16 以下的 47-smooth 数):

vector<int> p = { 2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47 };
vector<long long> s = { 1 }; long long lim = 10000000000000000;
for (int i = 0; i < p.size(); i++) {
    vector<long long> w;
    for (long long j : s) {
        long long mul = j;
        for (; mul <= lim; mul *= p[i]) w.push_back(mul);
    }
    s = w;
}

您可以在O(log N + log X) 中分解N-平滑数X,因此您可以计算divisor functionO(log N + log X)

我给出了我的代码的结果,例如,我使用 1GB 内存在 3.5 秒内计算了 10^13 以下的所有 61 个平滑数字。

【讨论】:

  • 一些 cmets 来解释正在发生的事情会使这更有用。另外,“时间复杂度是启发式的”是什么意思?
  • 感谢您的回复。在 Wikipedia 页面 (en.wikipedia.org/wiki/Highly_composite_number) 中,HCN n 列中没有数字 10。但是,在我的说明中,10 是一个因子和大于下一个数字 11 的数字。大量除数是否与最大除数和相关?
  • @mohideen-imran-khan 已编辑。我找到了答案。
  • @square1001 感谢您的帮助。我不知道这样的序列,谷歌搜索也没有返回这个。
  • @mohideen-imran-khan 我有一个搜索序列的提示。请改用 OEIS(整数序列在线百科全书/oeis.org)。您可以输入序列并找到它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-09-09
  • 1970-01-01
  • 2018-11-29
  • 1970-01-01
  • 2012-09-23
  • 2020-03-12
  • 1970-01-01
相关资源
最近更新 更多