Skip to content

Instantly share code, notes, and snippets.

@sskwwskwww
Created December 12, 2016 15:16
Show Gist options
  • Save sskwwskwww/474429a0ed1a74fe33189a9e793c1103 to your computer and use it in GitHub Desktop.
Save sskwwskwww/474429a0ed1a74fe33189a9e793c1103 to your computer and use it in GitHub Desktop.
SM孵化最下位bit列から元の乱数列を計算する奴
Public Module Inv
Private ReadOnly invlist() As ULong = {&HAF630C9B9374B832UL, &H5FC1AAB2E39C4434UL, &HBD3BDA1869A675F1UL, &H1085296E28C0425AUL, &H2C23BA331C3BE6FCUL, &H31C7020BDEBC413DUL, &H69E216E9BBD26EC9UL, &H224AEB96ADD37392UL, &H7E22D643E79CD92EUL, &H2A335AD5F6E13D06UL, &HDEB7E9E63117D9ABUL, &H2EC75958BA057AD8UL, &HE769C722C8A18CB0UL, &H2CD358B8CFE73970UL, &H53582C1F25385E43UL, &H2DEB94943D604BB2UL, &H347150FC3CB5F0FEUL, &H2D6C077E2A7A2373UL, &H2FF951D9B993151UL, &H2D2343FDB9BAB82AUL, &H2F551181AE422688UL, &H5D237E3D6F7DCB49UL, &HDECC07E80CC01041UL, &H30C48335335FEB7FUL, &HA925A653684A5D01UL, &H4B79F55CC2563B50UL, &H16F3746C77F1BD4DUL, &H668CDA849CD2E78CUL, &H1E6349B08F0545C8UL, &H40160FF7C6DB891DUL, &HFA7967F7689DD586UL, &H32F3516717ECA59FUL, &H4A3130D70705F98CUL, &H7DA1B0D3E68B56C3UL, &HA827F3266CCF66A6UL, &H26822282FAD804BUL, &HEC6D5D890574B761UL, &H71441643F3F1F14EUL, &H90C1691508849DD0UL, &H4C66DA6DF0F8D52DUL, &H342643143AFBB98CUL, &H68D2E0330E2D5AB6UL, &H18913AE950077189UL, &H3869A1AD6FF21DBDUL, &H4314746FD0E3D31CUL, &H3D18DB386EE00690UL, &H8B313D3B9506DFBFUL, &HAB10C8B50A4DEE1UL, &HD26ADC5840EA9CA6UL, &H15223BA0BFA7AF5FUL, &H5B1D11B300831BD9UL, &H4565CEF9CF39E9A9UL, &H5675B6334942AFE4UL, &H4237CE9AA242A736UL, &HB6373C3E47CC7F7UL, &H2E35B759CB0A7AF5UL, &H8128290B400B43A1UL, &H304DBF0B31290B88UL, &HF4E3ED4C8F5BEDDCUL, &H357CE0F104B37FABUL, &H49DC908D9BA36CA6UL, &H36B366315D351E07UL, &HD30A49F0BE13CA27UL, &H67D115472AB57723UL, &H7A77B430D34CEBE2UL, &H210A52DC518084B5UL, &H584774663877CDF8UL, &H638E0417BD78827AUL, &HD3C42DD377A4DD92UL, &H4495D72D5BA6E724UL, &HFC45AC87CF39B25CUL, &H5466B5ABEDC27A0CUL, &HBD6FD3CC622FB356UL, &H5D8EB2B1740AF5B1UL, &HCED38E4591431960UL, &H59A6B1719FCE72E1UL, &HA6B0583E4A70BC86UL, &H5BD729287AC09764UL, &H68E2A1F8796BE1FCUL, &H5AD80EFC54F446E6UL, &H5FF2A3B373262A2UL, &H5A4687FB73757054UL, &HD36673C4C47EF753UL, &H6214BC58337669D8UL, &HBD980FD019802082UL, &H6189066A66BFD6FFUL, &HDF871C61486E0041UL, &H4EA1AA9B692189EBUL, &HA02AB81F7719C0D9UL, &H154BF52BD4283052UL, &HB10AC3A686F031D3UL, &H587E5FCD603AED70UL, &HF4F2CFEED13BAB0CUL, &H65E6A2CE2FD94B3FUL, &H19AE316996F1495BUL, &H23112185209B52CCUL, &H504FE64CD99ECD4CUL, &H4D044505F5B0097UL, &H5516EBD59213D481UL, &H3ADA6CA50A6E1DD7UL, &HAC4E82ED89F381E3UL, &H409FF4F90C7C5511UL, &HE580D6EFED0DC95BUL, &H9F78044F1D74A26UL, &H312275D2A00EE312UL, &H70D3435ADFE43B7AUL, &H8628E8DFA1C7A638UL, &H7A31B670DDC00D20UL, &H16627A772A0DBF7EUL, &H15621916A149BDC3UL, &HA4D5B8B081D5394CUL, &H2A4477417F4F5EBFUL, &H3BF673A199FC8DF1UL, &H5299DDD173FE2C18UL, &H21273CA10A7FE58BUL, &H5C3DDD17A908B126UL, &H16C6E787C8F98FEEUL, &H5C6B6EB39614F5EAUL, &H250521680168742UL, &H609B7E1662521711UL, &HE9C7DA991EB7DBB8UL, &H6AF9C1E20966FF57UL, &H93B9211B3746D94CUL, &H6D66CC62BA6A3C0EUL, &H503ADBF47515BD8EUL, &H29C784A6A5568164UL, &H2BD8C326E4DD2E0DUL, &H17F06AACB8E7110DUL, &HF4EF6861A699D7C6UL, &H4214A5B8A301096AUL, &H3D42B80BE81521B1UL, &H1F4E480D977CFBBEUL, &H2A440B6177B30165UL, &H5179EE785AC03103UL, &H754709C80689DEFBUL, &H709F2B7536090B53UL, &HF713F75F5CA5DCEDUL, &H634F254005981429UL, &H106B4C4CBA7C8881UL, &H6B1F22C1D2111A89UL, &HC0ACE0BB0C1BC34DUL, &H6FFC1272180CD183UL, &H5C0913376A2D79B9UL, &H6DE25DDA44657286UL, &H863204B1F69E7F07UL, &H6CDF4FD40B671FE2UL, &H2B00B74E100754E5UL, &H1C7B38928B612CFBUL, &HF6FC4F67ABFAFB47UL, &H1B404CF620F252B5UL, &H32C268050826BAC3UL, &H451115143FCEEC9DUL, &H4055703EEE3381B2UL, &H2A97EA57A85060A5UL, &HEFD9D78A951AD9E5UL, &H68AEFFB82DF825ABUL, &H6429CF1A3A8DEC5BUL, &H139F05BEB23F6935UL, &H335C62D32DE292B6UL, &H4622430A4136A598UL, &HA09FCC99B33D9A98UL, &H9A088A0BEB6012EUL, &HAA2DD7AB2427A902UL, &H75B4D94A14DC3BAEUL, &HD551551C8B1DB985UL, &H596DA9D0F5755569UL, &HCB01ADDFDA1B92B4UL, &H13EF0089E3AE944DUL, &HEF88BB62D8E77C65UL, &H39F4C697524589BEUL, &H819D8178DB75F631UL, &H2C312CC3560DE50BUL, &H2CC4F4EE541B7EFCUL, &H2AC4322D42937B86UL, &H49AB716103AA729AUL, &H5488EE82FE9EBD7FUL, &HFA20B784AB03A1A3UL, &H7D61FB800A71A77AUL, &HCF8229858C057157UL, &H6029FA0DBF9C9D06UL, &HA0419FC80909A59DUL, &H60849D45C1A4149EUL, &H896CF4EA98D7B4C7UL, &H1964BC0E2929D168UL, &H5E43E5F5A5950D33UL, &HDA1C3E6FF4001E5UL, &HAABE12F1F67708DBUL, &H29FD8E799598757UL, &HA075B7E8EA2B7B1EUL, &H538F094D4AAD02C8UL, &H1UL, &H0UL, &H57B1864DC9BA5C1BUL, &H2FE0D55971CE221AUL, &H9CC00AD28F07F1E0UL, &H2C5A74B839DD8BB1UL, &HDFC56F6041225140UL, &H4A720DD3649F6BAEUL, &H34C7A7622C00F108UL, &H7C65CA851821DEF5UL, &HB7C6FA367912AEECUL, &H65900965447075B9UL, &H366CE0E4327C4AEEUL, &H682E512FC7A0B699UL, &H7A63B9B5227DCE30UL, &H6E4CB6F3ECC3EEB9UL, &HFFD0BA97EB1D4CAUL, &H6D2DFFF0055D90CCUL, &HA8153A9557888E2EUL, &H6CB2BBA4872C5458UL, &HF45B46DC15A56C7EUL, &H6C6953459FBAC32CUL, &HC720F53F861BA70BUL, &H541FC4C95B80E3C9UL, &H8636DDD3D6571DE4UL, &H4D333E27A3743A4FUL, &HD65FA3DB74BBB068UL, &H5C38130E9BA8089UL, &HC80C8A175B15CB1DUL, &H17DD0C7A4EDC68C7UL, &HEE297FE89F0A0CFFUL, &H11F17EF4B8D74FF5UL, &H1869BAA6BEDA2A2EUL, &H65FDA88C86A164DUL, &H22DBCB85FC53CEC2UL, &H56F84BD255921CD5UL, &HD294B6D72674FA16UL, &H34D0A0D05A5DFA50UL, &H3C1C637DDFB1F5AAUL, &H6C43AC04CDE55834UL, &H33602A524102CBE9UL, &H72890C75F101574UL, &HA6D9F836C4801BEEUL, &H2E2756F3F4956E14UL, &H37F6C426688320AFUL, &H71EDBF8AE3B89999UL, &H574DF53CA3C0B659UL, &H5032E556CE3A1423UL, &H812CE1E83DFAFD80UL, &H760A09E2E9903530UL, &H803AD4D4F770758EUL, &H1CB5DFD65A35F420UL, &H2590BD62E9797E69UL, &H24AD2AB1669E3235UL, &H4CAAB126C6CF8E08UL, &H79497EFBA9C2BF82UL, &H5D072B37391EFEE7UL, &H3F706E013FA62F5BUL, &H50F9F92236659E89UL, &H1AF88BBFA602279DUL, &HB87956B1361DE8E8UL, &H349F032662C1244FUL, &HFB378A9434CDBF5EUL, &H56CF952B2BD04897UL}
Public Function CalcStatus(ByVal st() As UInteger, ByVal s() As ULong) As UInteger()
'sは下位bitから
st(0) = 0
st(1) = 0
st(2) = 0
st(3) = 0
Dim t As UInteger = 1
Dim c As Integer = 0
Dim ic As Integer = 0
Dim tmp As ULong
For i As Integer = 0 To 126
If i = 31 Or i = 63 Or i = 95 Then
t = 1
c += 1
End If
tmp = (invlist(ic) And s(0))
ic += 1
tmp = tmp Xor (invlist(ic) And s(1))
ic += 1
tmp = (tmp >> 32) Xor (tmp And &HFFFFFFFFUL)
tmp = (tmp >> 16) Xor (tmp And &HFFFFUL)
tmp = (tmp >> 8) Xor (tmp And &HFFUL)
tmp = (tmp >> 4) Xor (tmp And &HFUL)
tmp = (tmp >> 2) Xor (tmp And &H3UL)
tmp = (tmp >> 1) Xor (tmp And &H1UL)
If tmp = 1UL Then
st(c) = (st(c) Or t)
End If
t <<= 1
Next
Return st
End Function
End Module
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment