【パワポケ乱数】プログラム前半部分の計算用パラメータの記述を大幅削減してみた

今までパワポケ乱数関連で使ってたAn12、Cn12などに関しての記述が長すぎて煩わしかったので、削減

 

プログラム

今までブログで書いていたコードの「前半部分」にあたるもの。これを下のものに差し替えて使う

原理はすでに計算済みの値をただコピペして、複数の変数に一括で代入しただけ

A, C, M = 0x5d588b656c078965, 0x0000000000269ec3, 2**64

An1,An2,An3,An4,An5,An6=6726279311198226789,8227077990937477593,3641900572492503965,3844884882681883121,12478313692454077717,7891730251820858953
An7,An8,An9,An10,An11,An12=6247073422286906317,7805359175066883297,5838782242981684677,1393589326428787641,9108732868280846589,6276200521548427473
An13,An14,An15,An16,An17,An18=4387246718281112437,4915365748176532009,14384659199153257261,5573804873737629121,510226512578418213,15269244978222762393
An19,An20,An21,An22,An23,An24=14426245091887819357,7360208121106627505,334121770915104213,4928471522990672393,5318500281432508045,11515234365071067809

Cn1,Cn2,Cn3,Cn4,Cn5,Cn6=2531011,8181017474514197682,789582199073780477,759786950760636820,14429455622161994279,884189017989064486
Cn7,Cn8,Cn9,Cn10,Cn11,Cn12=14711288048086509249,2492308521768219112,4091334853373245259,7456084121517757018,13883168044098848325,500639915614930172
Cn13,Cn14,Cn15,Cn16,Cn17,Cn18=14547714921560502831,635532190249570894,10721743100614890889,11350325075819015888,3906310362125231827,10056513866114505474
Cn19,Cn20,Cn21,Cn22,Cn23,Cn24=7247394126583093389,5106247511830856548,14725572874457119031,8067783342602084470,3321623761751495505,6591036316851132088

 

An25、Cn25の求め方は下のプログラムを参考

参考:今まで使っていた長ったらしいプログラム

線形合同法のパラメータを少しいじって計算するやつをそのまま計算式の形で書いて代入したもの。

新しいプログラムは計算済みの値を一括代入

#12裏でステータスアップ武器
A = 0x5d588b656c078965
C = 0x0000000000269ec3
M = 2 ** 64

b=0
bb=0
bb2=0
b3=0
bb4=0
b5=0
b6=0
b7=0
b8=0
b9=0
b11=0
b12=0
b13=0
b14=0
b16=0
b17=0
b18=0
b19=0


#1:付加能力の乱数列の合計
n=6
nn=30

for i in range(0,n):
    b += A**i % M
An=A**n% M
Cn=(C*b)% M

for i in range(0,nn):
    bb += A**i % M
Ann=A**nn% M
Cnn=(C*bb)% M


#2:攻撃判定
An1=A
Cn1=C

An2=A**2%M
Cn2=Cn1*(A+1)%M

An3=A**3%M
Cn3=Cn2*(A+1)%M


for i in range(0,6):
    b6 += A**i % M
An6=A**6% M
Cn6=(C*b6)% M

for i in range(0,7):
    b7 += A**i % M
An7=A**7% M
Cn7=(C*b7)% M

for i in range(0,8):
    b8 += A**i % M
An8=A**8% M
Cn8=(C*b8)% M

for i in range(0,9):
    b9 += A**i % M
An9=A**9% M
Cn9=(C*b9)% M

for i in range(0,11):
    b11 += A**i % M
An11=A**11% M
Cn11=(C*b11)% M

for i in range(0,12):
    b12 += A**i % M
An12=A**12% M
Cn12=(C*b12)% M

for i in range(0,13):
    b13 += A**i % M
An13=A**13% M
Cn13=(C*b13)% M

for i in range(0,14):
    b14 += A**i % M
An14=A**14% M
Cn14=(C*b14)% M

for i in range(0,16):
    b16 += A**i % M
An16=A**16% M
Cn16=(C*b16)% M

for i in range(0,17):
    b17 += A**i % M
An17=A**17% M
Cn17=(C*b17)% M

for i in range(0,18):
    b18 += A**i % M
An18=A**18% M
Cn18=(C*b18)% M

for i in range(0,19):
    b19 += A**i % M
An19=A**19% M
Cn19=(C*b19)% M

 

コメント

タイトルとURLをコピーしました