【问题标题】:Estimate probability that two random integers between 0 and k are relatively prime估计 0 和 k 之间的两个随机整数互质的概率
【发布时间】:2014-03-05 14:28:30
【问题描述】:

通过生成和检查 p 个随机对。

对如何进行此操作有些困惑。我知道我可以制作一个算法来确定两个整数是否互质。我也很难理解生成和检查 p 随机对的含义。

【问题讨论】:

  • 让我们说k=9p=3。那么也许你会随机得到(1,9)(2,8)(6,5),而这些是你的p=3 对?
  • 问题是关于检查两个整数是否互质还是关于生成p个随机对?
  • 你可能还想知道你能得到多少可能的配对,其中有多少是相对质数,那么你就有了一个比例。
  • 随着 k 的增加,您的结果应该会很快收敛到 (6 / pi^2)

标签: python primes


【解决方案1】:

如果没有完整枚举 0 和 k 之间所有数字的相对素数(这是一项艰巨的任务,并且随着 k 的平方增长),您可以通过选择相对大量的随机对(其中 p ) 并确定它们是否互质。

假设随着样本量的增加,相对素数的比例趋向于所需的概率值(如果您采用 10,000 个样本对并且您发现其中 7,500 个是相对素数,那么您'd 估计相对素数的概率为 0.75)。

在 Python 中,random.randint(0, k)0k 之间选择一个(伪)随机整数。

【讨论】:

    【解决方案2】:
    import random as rs
    p = ? # Put in your value here
    k = ? # put in range value here
    
    lst = []
    for i in range(p):
      lst.append([rs.randint(0, k), rs.randint(0, k)])
    
    # Now loop over lst and find how many pairs are relatively prime (count)
    prob = count/p
    

    【讨论】:

      【解决方案3】:
      from random import randint
      
      
      def gcd(a, b):
          return gcd(b, a % b) if b else a # Euclid's algorithm
      
      def is_coprime(a, b):
        return gcd(a, b) == 1
      
      def get_coprime_prob(k, runs=1000):
        count = sum(1 for _ in range(runs) if is_coprime(randint(0, k), randint(0, k)))
        return count / float(runs)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-06-04
        • 2016-05-25
        • 1970-01-01
        • 2012-12-20
        • 2017-11-26
        • 2012-04-25
        • 2011-05-03
        • 1970-01-01
        相关资源
        最近更新 更多