uint private _seed; function srand(uint64 seed) external { _seed = seed; } event Random(uint[] value); // 线性同余 function _rand(uint seed) internal view returns(uint) { seed = seed * 214013 + 2531011; return uint64(_seed >> 16); } function rand(uint cnt) external returns(uint[] memory) { uint[] memory list = new uint[](cnt); uint seed = _seed; for (uint i; i < cnt; i++) { seed = _rand(seed); list[i] = seed & 0x7fff; } //_seed = _rand(seed); return list; //emit Random(list); }
线性同余 数学获取随机数
function rand() public { _seed = _seed * 214013 + 2531011; _seed = uint64(_seed >> 16); emit Random(_seed, _seed & 0x7fff) ; }