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

초사각형 셀의 값 합계를 찾는 Python 프로그램

<시간/>

초사각형은 k 차원을 갖는 직사각형입니다. 각 차원의 길이는 n1, n2, n3,....., nm로 표시할 수 있습니다. 초사각형의 셀은 (p,q,r,...)로 지정되며 (p,q,r,...)의 gcd와 동일한 값을 포함합니다. 여기서 1 <=p <=n1, 1 <=q <=n1 등입니다. 우리의 임무는 모든 셀 값 gcd(p,q,r,...)의 합을 결정하는 것입니다. 결과는 모듈로 10^9 + 7로 반환됩니다. 인덱싱은 1에서 n까지 수행됩니다.

따라서 입력이 input_arr =[[2, 2], [5, 5]]와 같으면 출력은 [5, 37]

두 개의 인스턴스가 입력으로 제공되며 이 두 개의 인스턴스에 대한 합을 결정해야 합니다. 각 경우에 초사각형은 4x4 2차원 직사각형이며 길이가 지정됩니다. 주소(p,q)와 gcd(p,q)는 다음과 같습니다 -

(p,q)   value   gcd(p,q)
(1, 1)  (1, 2)  1 1
(2, 1)  (2, 2)  1 2

gcd의 합계 =1 + 1 + 1 + 2 =5

두 번째 경우 -

(p,q)  value                gcd(p,q) sum(gcd of row i)
(1, 1) (1, 2) (1, 3) (1, 4) (1, 5)   1 1 1 1 1 = 5
(2, 1) (2, 2) (2, 3) (2, 4) (2, 5)   1 2 1 2 1 = 7
(3, 1) (3, 2) (3, 3) (3, 4) (3, 5)   1 1 3 1 1 = 7
(4, 1) (4, 2) (4, 3) (4, 4) (4, 5)   1 2 1 4 1 = 9
(5, 1) (5, 2) (5, 3) (5, 4) (5, 5)   1 1 1 1 5 = 9

gcd의 합계 =5 + 7 + 7 + 9 + 9 =37

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

  • coeff_find() 함수를 정의합니다. test_instance가 필요합니다.

    • 값:=1
    • test_instance의 각 k에 대해 다음을 수행합니다.
      • 값 :=값 * (k / i)의 부동 소수점 값
    • 반환 값
  • 메인 메소드/함수에서 다음을 수행하십시오 -
  • 출력:=새 목록
  • input_arr의 각 test_instance에 대해 다음을 수행합니다.
    • min_value :=test_instance의 최소값
    • 총 값 :=0
    • temp_dict :=새 지도
    • 최소값에서 0까지의 범위에 있는 i에 대해 1만큼 감소, 수행
      • p :=coeff_find(test_instance, i)
      • q :=나
      • q <=min_value 동안 수행
        • q :=q + i
        • q가 temp_dict에 있으면
          • p :=p - temp_dict[q]
      • temp_dict[i] :=p
      • total_value :=total_value + temp_dict[i]*i
      • 목록 출력 끝에 (total_value mod (10^9 + 7)) 추가
  • 반환 출력

이해를 돕기 위해 다음 구현을 살펴보겠습니다. −

def coeff_find(test_instance, i):
   value = 1
   for k in test_instance:
      value *= k // i
   return value
def solve(input_arr):
   output = []
   for test_instance in input_arr:
      min_value = min(test_instance)
      total_value = 0
      temp_dict = {}
      for i in range(min_value, 0, -1):
         p = coeff_find(test_instance, i)
         q = i
         while q <= min_value:
            q += i
            if q in temp_dict:
               p -= temp_dict[q]
         temp_dict[i] = p
         total_value += temp_dict[i]*i
      output.append(total_value % (10**9 + 7))
   return output
print(solve([[2, 2], [5, 5]]))

입력

[[2, 2], [5, 5]]

출력

[5, 37]