【问题标题】:Print sequences with prime sum打印带素数的序列
【发布时间】:2020-05-28 11:08:41
【问题描述】:

给定一个整数n,我想找到数字1n(含)的两个排列,使得任何给定索引处两个排列的数字总和始终为素数。

例如:

   n = 5

      1 2 3 4 5
      1 5 4 3 2

   n = 8

      1 2 3 4 5 6 7 8
      2 1 4 3 8 7 6 5

【问题讨论】:

  • 一个细节:在第一个例子中,它应该是[1 5 4 3 2]。 n 的最大大小是多少?
  • 你尝试了什么?
  • 1

标签: algorithm permutation primes


【解决方案1】:

在 {0,1} x {1...n} 上构造一个二部图,使得 (0, i) 和 (1, j) 当且仅当 i+j 是素数时才连通。

使用任何标准技术找到完美匹配,然后生成序列,使匹配的数字在同一索引处。

【讨论】:

  • 寻找边缘很慢。
【解决方案2】:

找到最小的数 k>=1 使得 n+k 是素数。

形式对:(n,k), (n-1, k+1), ..., (k,n)。

如果 k>1,在范围 [1,k] 上重复。

例如,n=5:5+2=7,所以我们有:

5, 4, 3, 2
2, 3, 4, 5

然后我们重复 1。

例如n=8: 8+3 = 11,所以我们有:

8, 7, 6, 5, 4, 3
3, 4, 5, 6, 7, 8

剩下 2 个:

1, 2
2, 1

根据 Bertrand 的假设,也就是 Chebyshev 定理,对于任何 n>1,都有一个素数 p s.t. n

【讨论】:

  • 这需要 O(n)
  • 非常好!我喜欢数学的应用可以使编程更容易。
  • @Dave 非常好。从字面上看,大部分工作都是写下排列。
  • @Dave 平均k = O(log(n))。如果 Cramer 的猜想为真,则最坏情况的差距以O(log(n)^2) 为界。这没有被证明(它比黎曼假设强得多),但已经证明k 的最坏情况在O(n^(5/8)) 的范围内。
  • 感谢您的关注...但我想通了。也感谢您的帮助。我应用了相同的概念。
猜你喜欢
  • 2015-12-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-08-22
  • 2016-05-07
  • 1970-01-01
相关资源
最近更新 更多