Computer >> 컴퓨터 >  >> 프로그램 작성 >> Python

주어진 조건에서 표시기 랜덤 변수에서 함수를 계산하는 Python 프로그램


두 개의 값 k와 n이 있다고 가정합니다. 임의의 순열이 p1, p2, ..., pn의 처음 n개의 자연수 1, 2, ..., n이라고 가정하고 F =(X2+...+Xn-1)k가 되도록 값 F를 계산합니다. , 여기서 Xi는 지시자 확률 변수이며, 다음 두 조건 중 하나가 성립하면 1입니다. pi-1 pi+1 또는 pi-1> pi

따라서 입력이 k =1 n =1000과 같으면 출력은 1996/3

이 됩니다.

이 문제를 해결하기 위해 다음 단계를 따릅니다. −

  • exp_factor() 함수를 정의합니다. n,k
  • 소요됩니다.
  • k가 1과 같으면
    • return(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 반환
  • 메인 방법에서 다음을 수행하십시오. -
  • 남 :=n-2
  • p :=2.0/3
  • q :=1 - p
  • (num, den) :=exp_factor(n, k)
  • g :=gcd(숫자, 덴)
  • 반환 비율(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