【问题标题】:Count multiple of a number in a given range with O(1) complexity?以 O(1) 复杂度计算给定范围内数字的倍数?
【发布时间】:2016-07-06 08:16:53
【问题描述】:

给定三个数,L、R 和 K。我们需要计算 L 和 R(包括两者)之间能被 K 整除的数。

是否可以用 O(1) 复杂度解决?

我知道这是一个非常简单的程序,可以通过循环轻松完成。但我想知道是否可以应用某种公式或其他东西来直接知道 L 和 R 之间可被 K 整除的数字的计数。

例如,count = (R - L + 1) / K 在某些情况下可能会起作用。

有什么事吗?

【问题讨论】:

  • 请不要在关于 SO 的问题中使用链接,因为它们可能会在未来某个时候死掉,问题变得毫无用处。请在此处描述问题。
  • 您的示例将在某些情况下工作 - 您只需检查最终情况(是否r % k = 0 等)
  • 标题非常具有误导性,因为它描述了一个可能更难的问题。您想计算给定范围内数字的 倍数
  • @j_random_hacker 这就是我在 HackerEarth 上的解释,我从那里解决了这个问题。看看hackerearth.com/problem/algorithm/count-divisors
  • 嗯,他们把它简单地称为“计数除数”,这比错误更不清楚,而你的标题“计算一个数字的因子(或除数)”,在使陈述更清楚,也更清楚为什么它是错误的——他们没有计算任何特定数字的 的除数。 (例如,10 的除数或因数是 1、2、5 和 10。)所以请修正你的标题,我将删除 -1。

标签: algorithm time-complexity factors


【解决方案1】:

这是您的解决方案。

 quo1=l/k;
 quo2=r/k;
 rem=l%k;
 if(rem==0)
 {
   count=quo2-quo1+1;
 }
 else
 {
    count=quo2-quo1;
  }   

【讨论】:

  • 你可以改为r/k - (l - 1) / k(假设 l、r、k 是自然的)
  • 酷,这似乎更简单。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-06-25
  • 1970-01-01
  • 1970-01-01
  • 2020-11-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多