【问题标题】:Finding all Coprime subset upto a number N查找所有 Coprime 子集,直到一个数字 N
【发布时间】:2020-04-04 05:07:15
【问题描述】:

假设我有数字 1 到 N,我想根据以下标准将它们分成子集:

  1. 每个数字只能出现在 1 个子集中。
  2. 子集的元素必须互质。
  3. 最小化子集的总数。

我的方法是通过使用埃拉托色尼筛法找到直到 N 的所有素数,然后将它们相应地划分为子集。例如,对于 N=5,我可以有两个子集至少为 {1,2,3,5} 和 {4}。但我不确定如何在子集中分配元素,以便每个子集具有互质元素。 这是我的逐步方法:

  1. 设置 1:{所有素数最多为 N}
  2. 设置 2:{2k,3k,5k...pk} 其中p 是一个素数并且 pkk
  3. 其余元素

问题是如何让步骤 3 中的元素在子集中互质 有人可以就如何实现它以及我的逻辑缺陷提出更好的方法吗?

【问题讨论】:

标签: algorithm subset dynamic-programming primes sieve-of-eratosthenes


【解决方案1】:

这似乎是一个棘手的问题。没有两个偶数可以在同一个子集中,所以最小子集的个数是 floor(n/2)

如果 n 是偶数,您可以轻松实现与子集 {2i+1, 2i+2} 的绑定。对于 n 奇数,您也可以这样做,但将 {n-2, n-1, n} 放在最后一个子集中。请注意,相邻的数字总是互质的,当 n 为奇数时,n,n-2 互质。

【讨论】:

  • 我明白这一点,但我也必须尽量减少子集的总数。
  • 这样可以最小化子集的数量
  • 明白谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-05
  • 1970-01-01
相关资源
最近更新 更多