[1,1e18]中的正整数数不能被[2,10]中的任何整数除

时间:2017-11-15 02:48:27

标签: algorithm number-theory

我在尝试解决以下问题时遇到了困难:

  

对于Q查询,Q&lt; = 1e6,其中每个查询是正整数N,N <= 1e18,找到[1,N]中不能为的整数数   每个查询除以[2,10]中的整数。

我想过使用筛子方法来筛选每个查询[1,1e18]中的数字(类似于eratosthenes的筛子)。但是,N的值可能非常大。因此,我无法使用这种方法。我能做出的最有用的观察是以0,2,4,5,6,8结尾的数字是无效的。但这对我这个问题没有帮助。

我看到了类似problem的解决方案,该解决方案使用较少数量的查询(Q <= 200)。但它对这个问题并不起作用(我不理解这个解决方案)。

有人可以告诉我如何解决这个问题吗?

2 个答案:

答案 0 :(得分:3)

[2,10]中唯一的问题是那些2, 3, 5, 7

的素数

所以,比方说,[2,10]中的数字不能用整数除以数字不能除以{2,3,5,7}

这也等于[1,n]减去被{2,3,5,7}的任意组合除以的所有数字之间的总数。

所以,这是有趣的部分:来自[1,n]有多少数字除以2? 答案是n/2(为什么?简单,因为每2个数字,有一个数字除以2)

同样,有多少数字除以5?答案是n/5 ...

那么,我们有答案吗?不,因为我们发现我们已经加倍计算那些除以{2,5}或{2,7}的数字......,所以现在我们需要减去它们。

但是等等,似乎我们是双倍减去那些除以{2,5,7} ...所以我们需要把它加回来

...

继续这样做,直到所有组合都得到照顾, 所以应该有2 ^ 4组合,总共16个,相当小的处理。

查看Inclusion-Exclusion principle以获得一些好的理解。

祝你好运!

答案 1 :(得分:0)

以下是如何处理此问题的方法。

开始的地方是考虑如何将其拆分成碎片。有了这样的问题,一个起点就是最小公分母(LCD) - 在这种情况下为2,520(所有小于10的数字都可以分割的最小数字)。

这个想法是,如果x不能被2-10中的任何数字整除,那么x + 2,520也不能被整除。

因此,您可以将问题分为两部分:

  1. 1到2,520之间的数字是2-10的数字“相对素数”?
  2. 2,520进入您的目标号码多少次?您还需要考虑其余部分。