估计0和k之间的两个随机整数是相对素数的概率

时间:2014-03-05 03:46:57

标签: python primes

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

如何去做这件事有点困惑。我知道我可以制作一个算法来确定两个整数是否相对素数。我也很难理解生成和检查p随机对的含义。

3 个答案:

答案 0 :(得分:3)

如果没有完全枚举0和k之间所有数字的相对素数(一个巨大的任务和一个增长为k的平方的数字),你可以通过选择相对大量的随机对(p中的p)进行估计。并确定它们是否相对优质。

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

Python中的

random.randint(0, k)选择0k之间的(伪)随机整数。

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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)
相关问题