证明任意两个自然数互质的概率为6/pi^2

证明任意两个自然数互质的概率为 6 π 2 \frac{6}{\pi^2} π26

​ 设事件 A : { ′ m , n 互 质 ′ } A:\{'m,n互质'\} A:{m,n},事件 B : { ′ a , b 互 质 ′ } B:\{'a,b互质'\} B:{a,b},事件 C k : { ′ k 是 a , b 的 公 因 数 ′ } C_k:\{'k是a,b的公因数'\} Ck:{ka,b} D k : { ′ k 是 a , b 的 最 大 公 因 数 ′ } D_k:\{'k是a,b的最大公因数'\} Dk:{ka,b}

​ 若设任意两个自然数分别为 a , b a,b a,b,那么它们互质的概率我们设为 p p p,但是如果这两个自然数同时是 k k k的倍数的概率为:
P ( C k ) = p { a 是 k 的 倍 数 } p { b 是 k 的 倍 数 } = p { ∀ a ∈ N , a k 余 数 是 0 } p { ∀ b ∈ N , b k 余 数 是 0 } = N / k N N / k N = 1 k 2 P(C_k)=p\{a是k的倍数\}p\{b是k的倍数\}=p\{\forall a \in N,\frac{a}{k}余数是0\}p\{\forall b \in N,\frac{b}{k}余数是0\} = \frac{N/k}{N}\frac{N/k}{N} = \frac{1}{k^2} P(Ck)=p{ak}p{bk}=p{aN,ka0}p{bN,kb0}=NN/kNN/k=k21
​ 那么此时我们设:
a = k m , b = k n a = km,b = kn a=km,b=kn
​ 那么我们可以得到以下充要条件:
{ " m , n 互 质 " } ⇐ ⇒ { " k 是 a , b 的 最 大 公 因 数 ∣ k 是 a , b 的 公 因 数 " } \{"m,n互质"\}\Leftarrow \Rightarrow\{"k是a,b的最大公因数|k是a,b的公因数"\} {"m,n"}{"ka,bka,b"}
​ 这也就是说
P ( D k ∣ C k ) = P ( A ) P(D_k|C_k) = P(A) P(DkCk)=P(A)
​ 而此时 m m m n n n同样为任意两个自然数,他们互质的概率也为 p p p
P ( A ) = P ( B ) = p P(A) = P(B) = p P(A)=P(B)=p
​ 而 P ( C k ) = 1 k 2 P(C_k) = \frac{1}{k^2} P(Ck)=k21

​ 而由贝叶斯定理我们可以得到:
P ( D k ) = P ( D k ∣ C k ) P ( C k ) P(D_k) = P(D_k|C_k)P(C_k) P(Dk)=P(DkCk)P(Ck)
​ 而 D k ∣ C k : ′ 在 k 是 a , b 的 公 因 数 的 情 况 下 , k 是 a , b 的 最 大 公 因 数 ′ D_k|C_k:'在k是a,b的公因数的情况下,k是a,b的最大公因数' DkCk:ka,bka,b
P ( D k ∣ C k ) = P ( A ) P(D_k|C_k) = P(A) P(DkCk)=P(A)
​ 这里,我们需要明白一个事实,那就是,对于 k = 1 , 2 , . . . ∞ k=1,2,...\infty k=1,2,...,总有一个数 k k k a , b a,b a,b的最大公因数,这件事情的概率是 1 1 1。也就是说是确定事件。而 ∀ i , j ∈ N , D i ∩ D j = ϕ \forall i,j \in N,D_i \cap D_j = \phi i,jN,DiDj=ϕ。所以:
∑ k = 1 ∞ P ( D k ) = 1 \sum_{k=1}^{\infty}P(D_k)=1 k=1P(Dk)=1
​ 带入由贝叶斯定理导入的公式可得到:
∑ k = 1 ∞ p k 2 = 1 \sum_{k=1}^{\infty}\frac{p}{k^2} = 1 k=1k2p=1
​ 因此化简之后我们可以得到:
p = 1 ∑ k = 1 ∞ 1 k 2 = 6 π 2 p = \frac{1}{\sum_{k=1}^{\infty}\frac{1}{k^2}} = \frac{6}{\pi^2} p=k=1k211=π26
​ 接下来我们用 P y t h o n Python Python借助上面的原理估计一下 π \pi π的大小来验证结果的正确性:

import math
import random
def isInterSushu(sx,sy):
    num = min(sx,sy)
    res = 2
    for i in range(num,1,-1):
        if (sx%i == 0)&(sy%i == 0):
            res = 0
            break
        else:
            res = 1
    return res

def calPi(numbers):
    sum = 0
    error = 0
    random.seed(10)
    for i in range(numbers):
        sx_value = int(numbers*random.random())
        sy_value = int(numbers*random.random())
        if isInterSushu(sx_value,sy_value):
            sum += 1
            error += 1**2
    Prop = sum/numbers
    sigma = math.sqrt(1/numbers*error-(sum/numbers)**2)
    epsilon = sigma*1.96/math.sqrt(numbers)
    pi = math.sqrt(6 / (Prop))
    error_min = math.sqrt(6/(Prop+epsilon))
    error_max = math.sqrt(6/(Prop-epsilon))
    print("pi在{:}的试验次数下pi的估计值为{:.3f},由0.95的概率认为真值在[{:.5f},{:.5f}]之间。".format(numbers,pi,error_min,error_max))

calPi(10000)

最后的结果是:

pi在10000的试验次数下pi的估计值为3.131,0.95的概率认为真值在[3.10672,3.15558]之间。

Process finished with exit code 0

可以发现结论基本上是正确的。

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值