???????????????????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()???????