Java ????????????
???????????? ???????[ 2012/8/2 10:36:39 ] ????????
???????????????????seed????????nextseed???????????????卸?????????????????????????????????????????????????????seed??????????????????????????????????????seed??????????????seed???????????????????????????????
?????????????????????????????????????java.security.SecureRandom??????伪?????Random??????????Random??????????next??n???????????????????????????????????????SHA1PRNG???????????????
????效???????????????????1??????????
static int r3(int n) {
final int offset = 123456; // offset????????????渭??????????????????械??salt?械??????
long seed = System.currentTimeMillis() + offset;
SecureRandom secureRandom1;
try {
secureRandom1 = SecureRandom.getInstance("SHA1PRNG");
secureRandom1.setSeed(seed);
return secureRandom1.nextInt();
} catch (NoSuchAlgorithmException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return 0;
}
??????????
????a??nextInt(n)????????
?????煤??????械???????31位?????????围next(31)???????[0??n)??围????????????????????????????????????????????????????????????芯???????????围??1??100????????????渭????????围?1??30????????????????????围??????????????椋�???????100????30?????????????渭?????????????[1??30)?? [31?? 60)?? [61?? 90)?? [91??100)?????????????????校?????1??10?????????????11??30??????jdk???????????????????????31bit??????????[0??n)????????next(31)????????????????????????????????nextInt(n)?????????????????????
??????n??2?????????????n???????2^31???????????????????????????next(31)?????伞?
??????n????2??????????????????????????械?????????????????????????bits - val + (n-1) < 0 ????卸??????????????????????????????卸???????????
???????? 2^31 / n = max ...val ??val??2^31????n???????? max???????2^31-val=nMax ???????????2^31????????n???????????[nMax??2^31)??????????????bits?????????围??????????????????????????????nMax < 2^31 < n(Max+1)
??????????bits = next(31)??????????[0??2^31)????????????
????????bits<nMax????bits - val???????n??????????(小??Max)?校???bits-val+n-1???小??nMax??????????????????????
????????bits>=nMax????bits-val = nMax?? ??bits-val+n-1=nMax+n-1=n(Max+1) - 1 > 2^31 -1 ?????????bits>=nMax????bits-val+n-1 >= 2^31 ??????int??2^31?????????2^31<0??
??????????while(bits-val+n-1 < 0) ???卸????????????
????b??nextInt(n)????????????????小??2
???????a??????nextInt(n)???????????????????????????????????????????????????????????????nextInt(n)??javadoc?????????n=2^30+1??????[nMax??2^31)???围????????????n<2^30+1??小?????????????newMax???[nNewMax?? 2^31) ???围??小??
??????n=2^30+1?????????围[2^30+1?? 2^31)??????围[0?? 2^30)?????????????????????????????50%????????????????????????50%??????????
?????????????????nextInt(n)?????????next(n)????小??2????????????Math.random()???????
??????

???路???
??????????????????
2023/3/23 14:23:39???写?貌??????????
2023/3/22 16:17:39????????????????????些??
2022/6/14 16:14:27??????????????????????????
2021/10/18 15:37:44???????????????
2021/9/17 15:19:29???路???????路
2021/9/14 15:42:25?????????????
2021/5/28 17:25:47??????APP??????????
2021/5/8 17:01:11