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