파이썬 스니펫으로 구현하고자 하는것은?
1) 11^n 계산에서 “자리올림(캐리)”을 정량화
a)무엇을 측정하는가?
파스칼 계수 줄 [C(n,0),...,C(n,n)]을 만들어서
10진 캐리(자리올림)를 실제로 전파시키며
다음 지표들을 나타낸다.
W_n : 캐리 이전에 한 자리(9)를 넘는 계수의 개수(= 중앙 띠 폭)
total_carries : 전체 계산에서 발생한 자리올림의 총량
D_n : 자리올림 밀도 = total_carries / 최종 자릿수 길이
final_digits : 최종 10진 자릿값 리스트(LSD-first; 뒤집으면 11^n의 10진 표기가 됨)
핵심 함수
pascal_row(n) → [C(n,0),...,C(n,n)]
carry_map_from_pascal(n, base=10) → (final_digits, total_carries, W_n, D_n)
demo_table_for_n(2, 40) → 여러 n에 대해 요약 표 출력
# (A) 자리올림 지도 요약
digits, tc, Wn, Dn = carry_map_from_pascal(25, base=10)
print("W_n(중앙 띠 폭):", Wn)
print("total_carries(총 캐리):", tc)
print("D_n(밀도):", Dn)
print("num_digits(최종 자릿수 개수):", len(digits))
# 여러 n에 대한 테이블
demo_table_for_n(2, 40)
> 해석 포인트
W_n은 대략 √n 스케일로 커져서 “중앙 중첩의 폭”이 넓어짐을 보여준다.
D_n은 합성(깊이 n)이 커질수록 보통 커지며, “경계 통과(자리올림)”가 점점 중앙에 집중되는 경향을 확인할 수 있다.
2) 곱셈적(배율) 과정의 벤포드 수렴 시뮬
b) 무엇을 측정하나?
배율 과정 X_{t+1} = X_t * Y_t를 오래 반복하면
phi = frac(log10 X) (로그의 가수 위상)이 균등에 가까워지고 첫 자릿수 분포가 벤포드형으로 수렴하는 걸 수치로 확인할 수 있다.
같이 출력되는 지표:
HB = 1 - 12*Var(phi) : 위상 혼합 지표(0에 가까우면 “벤포드적”)
H1_bits : 첫 자릿수의 셰넌 엔트로피(벤포드일 때 ≈ 2.876 bits)
first_digit_hist : 1~9 첫 자릿수의 실측 분포
benford : 이론적 벤포드 분포(비교용)
핵심 함수
simulate_benford_convergence(steps=20000, growth_sampler=None)
기본 growth_sampler는 Y = 10^U, U ~ Uniform[-0.5, 0.5] (규모가 넓게 섞이는 배율)
어떻게 쓰나?
# (B) 벤포드 수렴 실험
res = simulate_benford_convergence(steps=20000)
print("HB(0에 가까울수록 섞임↑):", res["HB"])
print("H1_bits(벤포드≈2.876):", res["H1_bits"])
print("실측 분포:", [round(x,3) for x in res["first_digit_hist"]])
print("이론 벤포드:", [round(x,3) for x in res["benford"]])
> 해석 포인트
HB가 0에 가까워질수록 위상(phase) 혼합이 잘 된 상태 → 벤포드 근사 강화
H1_bits가 2.876 bits 근처면 벤포드형에 근접
실측 분포가 이론 벤포드와 비슷해지면 “곱셈-혼합 → 벤포드 수렴”이 확인된다.
커스터마이즈 팁
다른 진법으로 자리올림을 보고 싶으면: carry_map_from_pascal(n, base=p)
다른 성장 모델로 벤포드 수렴을 보고 싶으면
import random, math
# 예: 로그정상분포 성장률
def lognormal_growth(mu=0.0, sigma=0.25):
z = random.gauss(0, 1)
return 10 ** (mu + sigma*z)
res = simulate_benford_convergence(steps=20000, growth_sampler=lambda: lognormal_growth(0, 0.2))
한 줄 요약(요약 직관)
(A) 자리올림 지도: 11^n 계산에서 발생하는 자릿수 경계 통과를 W_n, total_carries, D_n로 정량화 → 중앙 중첩이 n과 함께 커지는 걸 확인.
(B) 벤포드 수렴: 곱셈적 변화가 길게 이어지면 위상(phase) 혼합이 진행되어 첫 자릿수 분포가 벤포드형으로 수렴( HB → 0, H1_bits → 2.876 ).