从给定条件计算指示随机变量的Python程序函数
假设有两个值k和n。考虑自然数1、2、…、n的随机排列p1,p2,…,pn,并计算值F,使得F = (X2+…+Xn-1)k,其中Xi是指示随机变量,当以下两个条件之一成立时,Xi为1:pi-1
因此,如果输入为k = 1 n = 1000,则输出将为1996/3。
为了解决这个问题,我们将按照以下步骤进行:
- 定义exp_factor()函数。这将需要n和k。
- 如果k与1相同,则
- return(2*(n-2),3)
- 否则,当k与2相同时,则
- return(40n^2-144n+131,90)
- 否则,当k与3相同时,则
- return(280n^3-1344n^2+2063*n-1038,945)
- 否则,当k与4相同时,则
- return(2800n^4-15680n^3+28844n^2-19288n+4263,14175)
- 否则,当k与5相同时,则
- return(12320n^5-73920n^4+130328n^3-29568n^2-64150*n-5124,93555)
- 返回1.0
- 从主方法中,执行以下操作−
- M:= n-2
- p:= 2.0/3
- q:= 1-p
- (num,den):= exp_factor(n,k)
- g:= gcd(num,den)
- 返回fraction(num/g)/(den/g)
示例
让我们看看以下实现,以获得更深入的理解−
from math import gcd
def exp_factor(n,k):
if k == 1:
return (2*(n-2),3)
elif k == 2:
return (40*n**2-144*n+131,90)
elif k == 3:
return (280*n**3-1344*n**2+2063*n-1038,945)
elif k == 4:
return (2800*n**4-15680*n**3+28844*n**2-19288*n+4263,14175)
elif k == 5:
return (12320*n**5-73920*n**4+130328*n**3-29568*n**2-64150*n-5124,93555)
return 1.0
def solve(k, n):
M = n-2
p = 2.0/3
q = 1-p
num, den = exp_factor(n,k)
g = gcd(num, den)
return str(int(num/g))+'/'+str(int(den/g))
k = 1
n = 1000
print(solve(k, n))
输入
1, 1000
输出
1996/3