मान लीजिए हमारे पास दो मान k और n हैं। पहले n प्राकृतिक संख्याओं 1, 2, ..., n के एक रैंडम क्रमपरिवर्तन p1, p2, ..., pn पर विचार करें और मान F की गणना करें, जैसे कि F = (X2+...+Xn-1)^k, जहां Xi एक इंडिकेटर रैंडम वेरिएबल है, जो तब 1 होता है जब निम्न दो शर्तों में से कोई एक होती है: pi-1 < pi > pi+1 या pi-1 > pi < pi+1 और Xi अन्यथा 0 होता है। हमें F का अपेक्षित मान ढूंढना है।
उदाहरण के लिए, यदि इनपुट k = 1 n = 1000 है, तो आउटपुट 1996/3 होगा।
समाधान दृष्टिकोण
इसे हल करने के लिए हम निम्न चरणों का पालन करेंगे:
- exp_factor() नामक एक फंक्शन परिभाषित करें। यह n, k लेगा
- यदि k, 1 के समान है, तो
- (2*(n-2), 3) लौटाएं
- अन्यथा जब k, 2 के समान है, तो
- (40*n^2 -144*n + 131, 90) लौटाएं
- अन्यथा जब k, 3 के समान है, तो
- (280*n^3 - 1344*n^2 +2063*n -1038, 945) लौटाएं
- अन्यथा जब k, 4 के समान है, तो
- (2800*n^4 - 15680*n^3 + 28844*n^2 - 19288*n + 4263, 14175) लौटाएं
- अन्यथा जब k, 5 के समान है, तो
- (12320*n^5 - 73920*n^4 + 130328*n^3 - 29568*n^2 - 64150*n -5124, 93555) लौटाएं
- 1.0 लौटाएं
- यदि k, 1 के समान है, तो
- मुख्य विधि से, निम्न करें:
- M := n-2
- p := 2.0/3
- q := 1 - p
- (num, den) := exp_factor(n, k)
- g := gcd(num, den)
- भिन्न (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