Diff
checker
텍스트
텍스트
이미지
문서
Excel
폴더
Legal
Enterprise
데스크톱
요금제
로그인
데스크톱 앱 다운로드
텍스트 비교
두 텍스트 파일의 차이점을 찾아보세요
도구
기록
실시간 편집
공백 변경 숨기기
변경 없는 행 숨기기
줄바꿈 비활성화
레이아웃
나란히 보기
합쳐 보기
비교 단위
스마트
단어
글자
텍스트 스타일
모양 변경
구문 강조
언어 선택
제외
텍스트 변환
첫 변경으로
수정
Diffchecker Desktop
가장 안전하게 Diffchecker를 사용하는 방법. 데스크톱 앱을 사용하면 비교 데이터가 외부로 전송되지 않습니다!
데스크톱 앱 받기
gawkmaster069 C
생성일
8개월 전
비교 결과 만료 없음
초기화
내보내기
공유
설명
43 삭제
행
총
삭제
글자
총
삭제
이 기능을 계속 사용하려면 업그레이드해 주세요
Diff
checker
Pro
요금제 보기
34 행
복사
73 추가
행
총
추가
글자
총
추가
이 기능을 계속 사용하려면 업그레이드해 주세요
Diff
checker
Pro
요금제 보기
64 행
복사
import sys
import sys
복사
복사됨
복사
복사됨
def main(
):
input = sys.stdin.readline
input = sys.stdin.read
data = input().split()
def power(base, exp, P
):
T = int(data[0])
res = 1
idx = 1
base %= P
for _ in range(T):
while exp > 0:
n
=
int(data[idx])
if exp & 1:
m = int(data[idx
+ 1
])
res = (res * base) % P
p
=
int(data[idx + 2]
)
base = (base * base) % P
idx += 3
exp >>= 1
mm = m % p
return res
if mm == 0:
print(n % p)
def modInverse(n, P):
continue
return power(n, P - 2, P)
invm = pow(mm, p - 2, p)
C = [0] * (n + 1)
def solve():
C[0] = 1
N, M, P = map(int, input().split())
for i in range(1, n + 1):
invM = modInverse(M, P)
for j in range(i, 0, -1):
C[j] = (C[j] + C[j - 1]) % p
centers = []
ans = C[1] % p
for i in range(N):
invm_pow = 1
max_rad
=
min(i, N - 1 - i)
for k in range(1, n // 2
+
1):
centers.append((max_rad
+ 1
, 1))
invm_pow
=
(invm_pow
*
invm)
%
p
for i in range(N - 1):
l_odd
=
2 * k + 1
max_rad
=
min(i, N - 2 - i
)
if l_odd <= n:
centers.append((max_rad + 1, invM))
ans = (ans + C[l_odd] * invm_pow % p) % p
l_even = 2 * k
globalSum = 0
if l_even <= n:
for cnt, start_prob in centers:
ans = (ans + C[l_even] * invm_pow % p) % p
if invM == 1:
print(ans)
term_sum = (cnt % P) * start_prob % P
if __name__ == "__main__"
:
else:
main()
num = (1 - power(invM, cnt, P) + P) % P
den = (1 - invM + P) % P
term_sum = start_prob * num % P * modInverse(den, P) % P
globalSum = (globalSum + term_sum) % P
ans = globalSum * globalSum % P
for cnt, start_prob in centers:
if invM == 1:
sum_q = (cnt % P) * start_prob % P
else:
num = (1 - power(invM, cnt, P) + P) % P
den = (1 - invM
+
P) % P
sum_q
=
start_prob
*
num
%
P * modInverse(den, P) % P
sumSq
=
sum_q * sum_q % P
trueSum = 0
p_curr = start_prob
for x in range(cnt):
trueSum = (trueSum + (2*x + 1) * p_curr) % P
p_curr = (p_curr * invM) % P
ans = (ans - sumSq + P) % P
ans = (ans + trueSum) % P
print(ans)
t = int(input())
for _ in range(t)
:
solve()
저장된 비교 결과
원본
파일 열기
import sys def main(): input = sys.stdin.read data = input().split() T = int(data[0]) idx = 1 for _ in range(T): n = int(data[idx]) m = int(data[idx + 1]) p = int(data[idx + 2]) idx += 3 mm = m % p if mm == 0: print(n % p) continue invm = pow(mm, p - 2, p) C = [0] * (n + 1) C[0] = 1 for i in range(1, n + 1): for j in range(i, 0, -1): C[j] = (C[j] + C[j - 1]) % p ans = C[1] % p invm_pow = 1 for k in range(1, n // 2 + 1): invm_pow = (invm_pow * invm) % p l_odd = 2 * k + 1 if l_odd <= n: ans = (ans + C[l_odd] * invm_pow % p) % p l_even = 2 * k if l_even <= n: ans = (ans + C[l_even] * invm_pow % p) % p print(ans) if __name__ == "__main__": main()
수정본
파일 열기
import sys input = sys.stdin.readline def power(base, exp, P): res = 1 base %= P while exp > 0: if exp & 1: res = (res * base) % P base = (base * base) % P exp >>= 1 return res def modInverse(n, P): return power(n, P - 2, P) def solve(): N, M, P = map(int, input().split()) invM = modInverse(M, P) centers = [] for i in range(N): max_rad = min(i, N - 1 - i) centers.append((max_rad + 1, 1)) for i in range(N - 1): max_rad = min(i, N - 2 - i) centers.append((max_rad + 1, invM)) globalSum = 0 for cnt, start_prob in centers: if invM == 1: term_sum = (cnt % P) * start_prob % P else: num = (1 - power(invM, cnt, P) + P) % P den = (1 - invM + P) % P term_sum = start_prob * num % P * modInverse(den, P) % P globalSum = (globalSum + term_sum) % P ans = globalSum * globalSum % P for cnt, start_prob in centers: if invM == 1: sum_q = (cnt % P) * start_prob % P else: num = (1 - power(invM, cnt, P) + P) % P den = (1 - invM + P) % P sum_q = start_prob * num % P * modInverse(den, P) % P sumSq = sum_q * sum_q % P trueSum = 0 p_curr = start_prob for x in range(cnt): trueSum = (trueSum + (2*x + 1) * p_curr) % P p_curr = (p_curr * invM) % P ans = (ans - sumSq + P) % P ans = (ans + trueSum) % P print(ans) t = int(input()) for _ in range(t): solve()
비교하기