$0=1 # q = 1 # q: 文字列 P に含まれる"o"の文字数 #$1=0 # p = 0 # p: 文字列 P に含まれる"x"の文字数 #$2=0 # r = 0 # r: 結合済み文字列に含まれる"x"の文字数 #$3=0 # s = 0 # s: 結合済み文字列に含まれる"o"の文字数 #$4=0 # f = 0 # f: 文字列 P の末尾が "o" なら 0, "x" なら 1 while $0<=N # while q <= N: # 十分大きな文字列 P を計算する $5=$0*K # p,q,f := q,q*K+p,1-f $5=$5+$1 $1=$0 $0=$5 $4=1-$4 end # end while $1>1 # while p > 1: # "o" の文字数が N 文字になるまで処理 $5=$0%$1 # p,q,f := q%p,p,1-f # P_{n+1},P_n から P_{n-1} を逆算する $0=$1 $1=$5 $4=1-$4 $5=N-$3 # t := (N-s)//q # 何回繰り返しで文字列を追加できるか $5=$5/$0 $6=$5*$1 # r,s := r+p*t,s+q*t # P の文字列を t 回追加 $2=$2+$6 $6=$5*$0 $3=$3+$6 if $3==N # if s == N: $1=0 # p := 0 end # end end # end if $1==1 # if p == 1: $4=1-$4 # f,r,s = 1-f,r+(q-K)*(N-s),N $5=$0-K $6=N-$3 $5=$5*$6 $2=$2+$5 end # end $0=$2-$4 # return (r-f+N) # 末尾が "x" で終わる場合(f=1) は 1 を引いて取り除く $0=$0+N return $0