рдПрдХ рдХреНрд░рд┐рдкреНрдЯреЛрдЧреНрд░рд╛рдлрд┐рдХ PRCH рдХреА рдЦреЛрдЬ рдореЗрдВ


рд╣рд╛рдп% рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдирд╛рдо%!

рдЖрдЬ рдХреА рдкреЛрд╕реНрдЯ рдореЗрдВ, рд╣рдо рдЫрджреНрдо рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рд╕рдВрдЦреНрдпрд╛ рдЬрдирд░реЗрдЯрд░ (PRNGs) рдХреА рдХреНрд░рд┐рдкреНрдЯреЛрдЧреНрд░рд╛рдлрд┐рдХ рд╕реНрдерд┐рд░рддрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░реЗрдВрдЧреЗред
рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░реЗрдВрдЧреЗ рдХрд┐ рдПрдХ рдХреНрд░рд┐рдкреНрдЯреЛ-рдкреНрд░рддрд┐рд░реЛрдзреА PRNG (KSGPSCH) рдХреНрдпрд╛ рд╣реИред
HRCSSC "рдЕрдЧрд▓реЗ рдмрд┐рдЯ рдкрд░реАрдХреНрд╖рдг" рдХреЛ рд╕рдВрддреБрд╖реНрдЯ рдХрд░реЗрдЧрд╛ред рдкрд░реАрдХреНрд╖рдг рдХрд╛ рдЕрд░реНрде рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ: рдПрдХ рдмрд╣реБрдкрдж рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдЬреЛ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдХреНрд░рдо рдХреЗ рдкрд╣рд▓реЗ k рдмрд┐рдЯреНрд╕ рдХреЛ рдЬрд╛рдирдХрд░, 50% рд╕реЗ рдЕрдзрд┐рдХ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдХреЗ рд╕рд╛рде k + 1 рдмрд┐рдЯреНрд╕ рдХреА рднрд╡рд┐рд╖реНрдпрд╡рд╛рдгреА рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдЧрд╛ред
рд╡рд┐рдХрд┐рдкреАрдбрд┐рдпрд╛

рд╢рд╛рдпрдж рдХреБрдЫ рдкрд╛рдардХреЛрдВ рдиреЗ рдХрдИ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░реЛрдВ рджреНрд╡рд╛рд░рд╛ рд░реИрдЦрд┐рдХ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдкрд╛рд░реА рд░рдЬрд┐рд╕реНрдЯрд░ (RSLOS) рдпрд╛ Mersenne рдкреНрд░рд┐рдп рдХреЗ рдмрд╡рдВрдбрд░ рдХреЗ рд░реВрдк рдореЗрдВ PRNGs рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рд╣реИред рдореИрдВ рдпрд╣ рджрд┐рдЦрд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реВрдВрдЧрд╛ рдХрд┐ рдпреЗ рджреЛрдиреЛрдВ рд╡рд┐рдзрд┐рдпрд╛рдВ, рдЙрдирдХреЗ рдмрд╣реБрдд рдЕрдЪреНрдЫреЗ рд╕рд╛рдВрдЦреНрдпрд┐рдХреАрдп рдЧреБрдгреЛрдВ рдФрд░ рдмрдбрд╝реА рдЕрд╡рдзрд┐рдпреЛрдВ рдХреЗ рдмрд╛рд╡рдЬреВрдж, рдЙрдкрд░реЛрдХреНрдд рдкрд░рд┐рднрд╛рд╖рд╛ рдХреЗ рдЕрдиреБрд░реВрдк рдирд╣реАрдВ рд╣реИрдВ рдФрд░ рдЗрдиреНрд╣реЗрдВ рдХреНрд░рд┐рдкреНрдЯреЛрдЧреНрд░рд╛рдлрд┐рдХ рд░реВрдк рд╕реЗ рдордЬрдмреВрдд рдирд╣реАрдВ рдорд╛рдирд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рдореИрдВ рдПрдХ рд╡рд┐рдХрд▓реНрдк рдХреЗ рд░реВрдк рдореЗрдВ, рджреЛ рдмрд╣реБрдд рд╡рд┐рд╢реНрд╡рд╕рдиреАрдп PRNGs рднреА рдкреНрд░рджрд╛рди рдХрд░реВрдВрдЧрд╛ред


рд░реИрдЦрд┐рдХ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдкрд╛рд░реА рд░рдЬрд┐рд╕реНрдЯрд░


рдЕрдХреНрд╕рд░ рдпрд╣ рджреЗрдЦрд╛ рдЧрдпрд╛ рдХрд┐ рдХреНрд░рд┐рдкреНрдЯреЛрдЧреНрд░рд╛рдлрд╝рд┐рдХ рдЙрджреНрджреЗрд╢реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдЗрд╕ рдкрджреНрдзрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рдерд╛, рдЗрд╕рд▓рд┐рдП, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рд╣рдо рдЗрд╕рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рдХрд░реЗрдВрдЧреЗред рдЗрд╕ рддрд░рд╣ рдХреЗ рдЬрдирд░реЗрдЯрд░ рд╢рд┐рдлреНрдЯ рд░рдЬрд┐рд╕реНрдЯрд░ рдФрд░ рдлреАрдбрдмреИрдХ рдлрд╝рдВрдХреНрд╢рди рд╕реЗ рдпреБрдХреНрдд рд╣реЛрддреЗ рд╣реИрдВред


рдкреНрд░рддреНрдпреЗрдХ PRNSS PRNS рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдмрд╣реБрдкрдж рдХреЗ рд╕рд╛рде рдЬреБрдбрд╝рд╛ рд╣реБрдЖ рд╣реИ рдЬреЛ рд░рдЬрд┐рд╕реНрдЯрд░ рдХреА рд▓рдВрдмрд╛рдИ рдФрд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рд╕рдорд╛рд░реЛрд╣ рдХреА рд╡рд┐рд╢реЗрд╖рддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдмрд╣реБрдкрдж рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд░рдЬрд┐рд╕реНрдЯрд░ рд╕реЗ рдореЗрд▓ рдЦрд╛рддрд╛ рд╣реИ:


рдмрд╣реБрдкрдж рдХреА рдбрд┐рдЧреНрд░реА рд░рдЬрд┐рд╕реНрдЯрд░ рдХреА рд▓рдВрдмрд╛рдИ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддреА рд╣реИ; рдиреЙрдирдЬрд╝рд░реЛ рдЯрд░реНрдореНрд╕ рдмрддрд╛рддреА рд╣реИрдВ рдХрд┐ рд░рдЬрд┐рд╕реНрдЯрд░ рдХреЗ рдХреМрди рд╕реЗ рддрддреНрд╡ рдЯреИрдк рд╕реАрдХреНрд╡реЗрдВрд╕ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░рддреЗ рд╣реИрдВред
рдпрджрд┐ рдирд▓ рдЕрдиреБрдХреНрд░рдо рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдмрд╣реБрдкрдж irreducible modulo 2 рд╣реИ, рддреЛ рд░рдЬрд┐рд╕реНрдЯрд░ рджреНрд╡рд╛рд░рд╛ рдЙрддреНрдкрдиреНрди рдЕрдиреБрдХреНрд░рдо рдХреА рдЕрд╡рдзрд┐ рдЕрдзрд┐рдХрддрдо рд╣реЛрдЧреА рдФрд░ рд╕реВрддреНрд░ рджреНрд╡рд╛рд░рд╛ рдЧрдгрдирд╛ рдХреА рдЬрд╛рдПрдЧреА ред

рдХрд╛рдо рд╢реБрд░реВ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рдмрд┐рдЯреНрд╕ рдХрд╛ рдПрдХ рдордирдорд╛рдирд╛ рдЕрдиреБрдХреНрд░рдо, рдЬрд┐рд╕реЗ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдЕрд╡рд╕реНрдерд╛ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рд░рдЬрд┐рд╕реНрдЯрд░ рдореЗрдВ рджрд░реНрдЬ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЙрд╕рдХреЗ рдмрд╛рдж, рдЬрдирд░реЗрдЯрд░ рдХрд╛ рдкреНрд░рддреНрдпреЗрдХ рдШрдбрд╝реА рдЪрдХреНрд░ 1 рдмрд┐рдЯ рд▓реМрдЯрд╛рддрд╛ рд╣реИ, рдЬреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рджрд┐рдЦрддрд╛ рд╣реИред
RSLOS рдкреНрд░рддрд┐ se рдЕрдЪреНрдЫреЗ PRNG рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЪреВрдВрдХрд┐ рдЙрдирдХреА рдорджрдж рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдмрд┐рдЯреНрд╕ рдореЗрдВ рдПрдХ рд░реИрдЦрд┐рдХ рд╕рдВрдмрдВрдз рд╣реИ, рдЗрд╕рд▓рд┐рдП рдХреНрд░рд┐рдкреНрдЯреЛрдЧреНрд░рд╛рдлрд┐рдХ рдкреНрд░рдпреЛрдЬрдиреЛрдВ рдХреЗ рд▓рд┐рдП RSLOS рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЕрдиреБрдЪрд┐рдд рд╣реИред
рдпрджрд┐ рдХреЛрдИ рд╣рдорд▓рд╛рд╡рд░ RSLOS рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЙрддреНрдкрдиреНрди рд▓рдВрдмрд╛рдИ рдХреЗ рдмрд┐рдЯреНрд╕ рдХрд╛ рдПрдХ рдЕрдиреБрдХреНрд░рдо рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ, рддреЛ рд╡рд╣ рдЗрди рдмрд┐рдЯреНрд╕ рдХреЛ рд░рдЬрд┐рд╕реНрдЯрд░ рдореЗрдВ рд▓реЛрдб рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рд╕реНрдерд┐рддрд┐ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд╛рдкрд╕ рд╕реНрдХреНрд░реЙрд▓ рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдкреНрд░рд╛рд░рдВрднрд┐рдХ рд╕реНрдерд┐рддрд┐ рдХреЛ рдЬрд╛рдирдиреЗ рд╕реЗ рдЙрд╕реЗ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдкрд╣рд▓реЗ рдФрд░ рдЙрддреНрдкрдиреНрди рд╕рднреА рдЕрдиреБрдХреНрд░рдореЛрдВ рддрдХ рдкрд╣реБрдВрдЪ рдорд┐рд▓реЗрдЧреАред

рдХреЗрд╕ рдХреА рдЬрд╛рдирдХрд╛рд░реА рдЫреБрдкрд╛рдирд╛ рдПрдХ рдЕрдЪреНрдЫрд╛ рд╡рд┐рдЪрд╛рд░ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдлрд┐рд░, рд▓рдВрдмрд╛рдИ n рдХрд╛ рдПрдХ рдХреНрд░рдо рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рднреА, рд╣рдорд▓рд╛рд╡рд░ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рд╕реНрдерд┐рддрд┐ рдХреЛ рдЦреЛрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдХрджрдо рдирд╣реАрдВ рдЙрдард╛ рдкрд╛рдПрдЧрд╛ред
рд▓реЗрдХрд┐рди рдмреЗрд░реНрд▓реЗрдХреИрдВрдк - рдореИрд╕реА рдПрд▓реНрдЧреЛрд░рд┐рдердо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдХреЛ рдЖрд╕рд╛рдиреА рд╕реЗ рд╣рд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рдПрд▓реНрдЧреЛрд░рд┐рджрдо RSLOS рд╕реЗ рдЬреБрдбрд╝реЗ рдмрд╣реБрдкрдж рдХреЛ рдЦреЛрд▓рдирд╛ рд╕рдВрднрд╡ рдмрдирд╛рддрд╛ рд╣реИред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдХреЗрд╡рд▓ 2n рдХреА рд▓рдВрдмрд╛рдИ рдХреЗ рд╕рд╛рде рд░рдЬрд┐рд╕реНрдЯрд░ рджреНрд╡рд╛рд░рд╛ рдЙрддреНрдкрдиреНрди рдЕрдиреБрдХреНрд░рдо рд╣реЛрдирд╛ рдкрд░реНрдпрд╛рдкреНрдд рд╣реИред
рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╛рдлреА рд╕рд░рд▓ рд╣реИ:
public int[] BerlekampMassey(int[] array) { int N = array.Length; int[] b = new int[N]; int[] c = new int[N]; int[] t = new int[N]; b[0] = 1; c[0] = 1; int l = 0; int m = -1; for (int n = 0; n < N; n++) { int d = 0; for (int i = 0; i <= l; i++) { d ^= c[i] * array[n - i]; } if (d == 1) { Array.Copy(c, 0, t, 0, N); int N_M = (nm); for (int j = 0; j < N - N_M; j++) { c[N_M + j] ^= b[j]; } if (l <= n / 2) { l = n + 1 - l; m = n; Array.Copy(t, 0, b, 0, N); } } } return c; } 

рдЗрдирдкреБрдЯ RSLOS рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЙрддреНрдкрдиреНрди рдмрд┐рдЯреНрд╕ рдХрд╛ рдПрдХ рдЕрдиреБрдХреНрд░рдо рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИред рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдпреЛрдЬрдирд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдПрдХ рдмрд╣реБрдкрдж рдЪрд░рд┐рддреНрд░ рдХрд╛ рдкрд░рд┐рдгрд╛рдо рд╣реИред

рдмреЗрд╢рдХ, RSLOS рдХреЛ рдЕрдзрд┐рдХ рдХреНрд░рд┐рдкреНрдЯреЛрдЧреНрд░рд╛рдлрд┐рдХ PRCH рдХреЗ рд▓рд┐рдП рдХреИрд╕реНрдХреЗрдб рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕ рд╡рд┐рдЪрд╛рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреБрдЫ рдзрд╛рд░рд╛ рд╕рд┐рдлрд░ рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЗрд╕ рдкрджреНрдзрддрд┐ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рдХрдИ рдЬрдирд░реЗрдЯрд░ рддрдерд╛рдХрдерд┐рдд рд╕рд╣рд╕рдВрдмрдВрдз рдХреЗ рд╣рдорд▓реЛрдВ рдХреА рдЪрдкреЗрдЯ рдореЗрдВ рд╣реИрдВред рдореИрдВрдиреЗ рдЕрдкрдиреА рд╣рд╛рд▓рд┐рдпрд╛ рдкреЛрд╕реНрдЯ рд╕реБрд░рдХреНрд╖рд╛ рдЬреАрдПрд╕рдПрдо рдиреЗрдЯрд╡рд░реНрдХ рдореЗрдВ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХреЗ рд╣рдорд▓реЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рд╡рд┐рд╡рд░рдг рджрд┐рдпрд╛ : рдбреЗрдЯрд╛ рдПрдиреНрдХреНрд░рд┐рдкреНрд╢рди ред рдпрд╣рд╛рдВ рдореИрдВ рдХреЗрд╡рд▓ рдпрд╣ рдХрд╣реВрдВрдЧрд╛ рдХрд┐ рд╕рд╣рд╕рдВрдмрдВрдз рдХреЗ рд╣рдорд▓реЗ рдХреА рдорджрдж рд╕реЗ, рдПрдХ рд╣рдорд▓рд╛рд╡рд░, рдЙрддреНрдкрдиреНрди PRNG рдХреЗ рдЕрдиреБрдХреНрд░рдо рдХреЗ рд╕рд╛рде, рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдореВрд▓реНрдп рдХреЛ рдкреБрдирд░реНрд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдФрд░ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдЙрддреНрдкрдиреНрди рд╕рднреА рдореВрд▓реНрдпреЛрдВ рддрдХ рдкрд╣реБрдВрдЪ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реИред

Mersenne рдмрд╡рдВрдбрд░


рдореЗрд░реА рд░рд╛рдп рдореЗрдВ рдмрд╣реБрдд рдЕрдзрд┐рдХ рджрд┐рд▓рдЪрд╕реНрдк PRNG рд╣реИ, рдЬрд┐рд╕реЗ Mersenne Whirlwind рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХреЗ рд▓рд┐рдП рдХрдИ рд╡рд┐рдХрд▓реНрдк рд╣реИрдВред рд╣рдо рдХреЗрд╡рд▓ рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ MT19937 рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВрдЧреЗред рд╣рдо рдЗрд╕ рдПрд▓реНрдЧреЛрд░рд┐рдердо рдХрд╛ рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ рд╡рд░реНрдгрди рдХрд░рддреЗ рд╣реИрдВред
Mersenne рднрдВрд╡рд░ рджреЛ рднрд╛рдЧреЛрдВ рдХреЗ рд╣реЛрддреЗ рд╣реИрдВ: RSLOS рдФрд░ рд╢рдордиред
рдЫрд╡рд┐
рд╢рд┐рдлреНрдЯ рд░рдЬрд┐рд╕реНрдЯрд░ рдореЗрдВ 624 рддрддреНрд╡, рдкреНрд░рддреНрдпреЗрдХ 32 рдмрд┐рдЯ рд▓рдВрдмреЗ рд╣реЛрддреЗ рд╣реИрдВред рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдЕрд╡рд╕реНрдерд╛ рдХрд╛ рдкреНрд░рд╛рд░рдВрдн рд╕рдорд╛рд░реЛрд╣ рджреНрд╡рд╛рд░рд╛ рд╡рд░реНрдгрд┐рдд рд╣реИ:
  function initialize_generator(int seed) { index := 0 MT[0] := seed for i from 1 to 623 { // loop over each other element MT[i] := last 32 bits of(1812433253 * (MT[i-1] xor (right shift by 30 bits(MT[i-1]))) + i) // 0x6c078965 } } 

рдЖрд░рдВрднреАрдХрд░рдг рд╕рдорд╛рд░реЛрд╣ рдХреЗ рдЗрдирдкреБрдЯ рдкрд░, рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдмреАрдЬ рдореВрд▓реНрдп рдХреА рдЖрдкреВрд░реНрддрд┐ рдХреА рдЬрд╛рддреА рд╣реИ, рдЬрд┐рд╕рдХреА рд╕рд╣рд╛рдпрддрд╛ рд╕реЗ рдкреВрд░рд╛ рд░рдЬрд┐рд╕реНрдЯрд░ рднрд░рд╛ рдЬрд╛рддрд╛ рд╣реИред

рдкрд╣рд▓реЗ рдФрд░ рдмрд╛рдж рдХреЗ 624 рд╡реЗрдВ рдЪрд░рдг рдореЗрдВ, рд░рдЬрд┐рд╕реНрдЯрд░ рдХреА рдЖрдВрддрд░рд┐рдХ рд╕реНрдерд┐рддрд┐ рдорд┐рд╢реНрд░рд┐рдд рд╣реИ:
  function generate_numbers() { for i from 0 to 623 { int y := (MT[i] & 0x80000000) // bit 31 (32nd bit) of MT[i] + (MT[(i+1) mod 624] & 0x7fffffff) // bits 0-30 (first 31 bits) of MT[...] MT[i] := MT[(i + 397) mod 624] xor (right shift by 1 bit(y)) if (y mod 2) != 0 { // y is odd MT[i] := MT[i] xor (2567483615) // 0x9908b0df } } } 


рдкреНрд░рддреНрдпреЗрдХ рдЪрд░рдг рдореЗрдВ, рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рд░рдЬрд┐рд╕реНрдЯрд░ рдХреА рд╡рд░реНрддрдорд╛рди рд╕реНрдерд┐рддрд┐ рд╕реЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдирдВрдмрд░ рд▓реМрдЯрд╛рддрд╛ рд╣реИ рдФрд░ рддрдерд╛рдХрдерд┐рдд "рд╣рд╛рд░реНрдбрдирд┐рдВрдЧ" рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИ:
  function extract_number() { if index == 0 { generate_numbers() } int y := MT[index] // y := y xor (right shift by 11 bits(y)) y := y xor (left shift by 7 bits(y) and (2636928640)) // 0x9d2c5680 y := y xor (left shift by 15 bits(y) and (4022730752)) // 0xefc60000 y := y xor (right shift by 18 bits(y)) index := (index + 1) mod 624 return y } 


рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХреА рдЖрдВрддрд░рд┐рдХ рд╕реНрдерд┐рддрд┐ рддрдХ рдкрд╣реБрдВрдЪ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдПрдХ рд╣рдорд▓рд╛рд╡рд░ рдХреЛ рдХреЗрд╡рд▓ 624 рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХрд╛ рдЕрдиреБрдХреНрд░рдо рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред
рдЖрдкрдХреЛ рдХреЗрд╡рд▓ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рджреНрд╡рд╛рд░рд╛ рдЙрддреНрдкрдиреНрди рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреЛ рдЙрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ рд╡рд╛рдкрд╕ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдЬрд┐рд╕рдореЗрдВ рд╡реЗ "рд╕рдЦреНрдд" рдЪрд░рдг рд╕реЗ рдкрд╣рд▓реЗ рдереЗред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рд╡рд┐рдкрд░реАрдд рджрд┐рд╢рд╛ рдореЗрдВ рд╕рдЦреНрдд рд╣реЛрдиреЗ рдХреЗ рд╕рднреА рдЪрд░рдгреЛрдВ рдХреЛ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╢рдорди рдХреЗ рдЕрдВрддрд┐рдо рдЪрд░рдг рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ:
y := y ^ (y >>> 18)
рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ рдЗрд╕ рдСрдкрд░реЗрд╢рди рдХреЛ рдХрд░рддреЗ рд╕рдордп рдмрд╛рдЗрдирд░реА рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рдХреНрдпрд╛ рд╣реЛрддрд╛ рд╣реИ:
y 101101110101111001 11111001110010
y >>> 18 00000000000000000010110111010111 100111111001110010
y ^ (y >>> 18) 101101110101111001 01001110100101
рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдкрд░рд┐рдгрд╛рдо рдХреЗ рдкрд╣рд▓реЗ 18 рдмрд┐рдЯреНрд╕ рдФрд░ рдореВрд▓ рд╕рдВрдЦреНрдпрд╛ рд╕рдорд╛рди рд╣реИрдВред рд╢реЗрд╖ 14 рдмрд┐рдЯреНрд╕ рдХреЛ рдкреБрдирд░реНрд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:
result ^ (result >>> 18)
рдХрдареЛрд░ рдЪрд░рдг рдХреЗ рд╕рднреА рдЪрд░рдгреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдорд╛рди рддрд░реАрдХреЗ рд╕реЗ рдХрд╛рд░реНрдп рдХрд░рддреЗ рд╣реБрдП, рд╣рдо PRNG рдХреА рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдЕрд╡рд╕реНрдерд╛ рдХрд╛ рдПрдХ рддрддреНрд╡ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВ:
  private uint reverse(uint output) { uint tempout = output >> 18; output = output ^ tempout; tempout = output << 15; output = (uint)(output ^ (tempout & 4022730752)); uint a = output << 7; uint b = (uint)(output ^ (a & 2636928640)); uint c = b << 7; uint d = (uint)(output ^ (c & 2636928640)); uint e = d << 7; uint f = (uint)(output ^ (e & 2636928640)); uint g = f << 7; uint h = (uint)(output ^ (g & 2636928640)); uint i = h << 7; uint tempfinal = (uint)(output ^ (i & 2636928640)); uint k = tempfinal >> 11; uint l = (uint)(tempfinal ^ k); uint m = (uint)l >> 11; uint final = (uint)(tempfinal ^ m); return final;  } 

рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ рдКрдкрд░ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рд╣реИ, рдЕрдЧрд░ рд╣рдорд▓рд╛рд╡рд░ рдХреЗ рдкрд╛рд╕ 624 рдирдВрдмрд░ рд╣реИрдВ, рдЬреЛ рдореЗрд░рд╕реЗрди рднрдВрд╡рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЙрддреНрдкрдиреНрди рд╣реБрдЖ рд╣реИ, рдпрд╣ рдкреВрд░реА рдЖрдВрддрд░рд┐рдХ рд╕реНрдерд┐рддрд┐ рдХреЛ рдмрд╣рд╛рд▓ рдХрд░рдиреЗ рдФрд░ рдмрд╛рдж рдХреЗ рдПрдХ рдореЗрдВ рдЙрддреНрдкрдиреНрди рд╕рднреА рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреЗ рд╕рд╛рде 100% рд╕рдВрднрд╛рд╡рдирд╛ рдХреЗ рд╕рд╛рде рднрд╡рд┐рд╖реНрдпрд╡рд╛рдгреА рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИред

рдХреНрд░рд┐рдкреНрдЯреЛрдЧреНрд░рд╛рдлрд┐рдХ PRSP


рдПрдХ рд╡рд┐рдХрд▓реНрдк рдХреЗ рд░реВрдк рдореЗрдВ, рдореИрдВ рджреЛ рдмрд╣реБрдд рд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рддрд░реАрдХреЛрдВ рдХреА рдкреЗрд╢рдХрд╢ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред

рдмреНрд▓рдо - рдмреНрд▓рдо - рд╢реБрдн рдПрд▓реНрдЧреЛрд░рд┐рдердо
рдпрд╣ рдЬрдирд░реЗрдЯрд░ рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдХреЗ рдХрд╛рд░рдХреАрдХрд░рдг рдХреА рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреА рдЬрдЯрд┐рд▓рддрд╛ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИред
рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдЫрджреНрдо рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдмрд┐рдЯреНрд╕ рдХрд╛ рдПрдХ рдХреНрд░рдо рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЗрд╕рдореЗрдВ рдирд┐рдореНрди рдЪрд░рдг рд╣реЛрддреЗ рд╣реИрдВ:

рдЖрдЬ рддрдХ, рдпрд╣ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рд╢рд╛рдпрдж рд╕рдмрд╕реЗ рд╡рд┐рд╢реНрд╡рд╕рдиреАрдп PRNG рд╣реИред рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдЕрд╡рд╕реНрдерд╛ рдХреЛ рдЦреЛрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╛ рдЫрджреНрдо рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдЕрдиреБрдХреНрд░рдо рдХреЗ рдЕрдЧрд▓реЗ рддрддреНрд╡ рдХрд╛ рдЕрдиреБрдорд╛рди рд▓рдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдорд▓рд╛рд╡рд░ рдХреЛ рд╕рдВрдЦреНрдпрд╛ рдкреА рдФрд░ рдХреНрдпреВ рдкрддрд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред
BBS рдЬрдирд░реЗрдЯрд░ рдореЗрдВ рдХреЗрд╡рд▓ рдПрдХ рдЦрд╛рдореА рд╣реИ - рдпрд╣ рдПрдХ рдЕрддреНрдпрдВрдд рдХрдо рдЧрддрд┐ рд╣реИред рдкреАрдврд╝реА рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рдЪрд░рдг рдореЗрдВ рдЙрддреНрдкрд╛рджрдХрддрд╛ рдмрдврд╝рд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдПрдХ рдХреЗ рдмрдЬрд╛рдп, рд▓реЙрдЧ (рд▓реЙрдЧ рдПрдо) рдмрд┐рдЯ рд╡рд╛рдкрд╕ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдпрд╣ рдХреНрд░рд┐рдкреНрдЯреЛрдЧреНрд░рд╛рдлрд┐рдХ рддрд╛рдХрдд рдХреЛ рдХрдо рдХрд┐рдП рдмрд┐рдирд╛ рдЧрддрд┐ рдмрдврд╝рд╛рдПрдЧрд╛ред

CTR рдПрдиреНрдХреНрд░рд┐рдкреНрд╢рди рдореЛрдб
рдПрдХ рдЫрджреНрдо рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдЕрдиреБрдХреНрд░рдо рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рддреЗрдЬрд╝, рд▓реЗрдХрд┐рди рд╕рдорд╛рди рд░реВрдк рд╕реЗ рд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рддрд░реАрдХрд╛ рдмреНрд▓реЙрдХ рд╕рд┐рдлрд░реНрд╕ рдХреЗ рдПрдиреНрдХреНрд░рд┐рдкреНрд╢рди рдХрд╛ рд╕реАрдЯреАрдЖрд░ рдореЛрдб рд╣реИ, рджреВрд╕рд░реЗ рд╢рдмреНрджреЛрдВ рдореЗрдВ, рдХрд╛рдЙрдВрдЯрд░ рдореЛрдбред рдПрдиреНрдХреНрд░рд┐рдкреНрд╢рди рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд░реВрдк рдореЗрдВ, рдЖрдк рдХрд┐рд╕реА рднреА рдордЬрдмреВрдд рдмреНрд▓реЙрдХ рд╕рд┐рдлрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдИрдПрд╕ред
рдЫрд╡рд┐
рдПрдиреНрдХреНрд░рд┐рдкреНрд╢рди рдХреБрдВрдЬреА рдФрд░ рдПрдХ 128-рдмрд┐рдЯ рдбреЗрдЯрд╛ рдмреНрд▓реЙрдХ рдЬрд┐рд╕рдореЗрдВ рдПрдХ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдмрд┐рдЯ рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╣реИ рдФрд░ рдПрдХ рдХрд╛рдЙрдВрдЯрд░ рдПрдиреНрдХреНрд░рд┐рдкреНрд╢рди рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдЗрдирдкреБрдЯ рдХреЛ рдЦрд┐рд▓рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдкреНрд░рддреНрдпреЗрдХ рдЪрд░рдг рдореЗрдВ, рдХрд╛рдЙрдВрдЯрд░ рдХреЛ рдПрдХ рд╕реЗ рдмрдврд╝рд╛ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рдмреНрд▓реЙрдХ рдХреЗ рджреЛрд╣рд░рд╛рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдЕрдиреБрдХреНрд░рдо рдХреА рдЧрд╛рд░рдВрдЯреА рдорд┐рд▓рддреА рд╣реИред рдЙрддреНрдкрдиреНрди рдЕрдиреБрдХреНрд░рдо рдПрдиреНрдХреНрд░рд┐рдкреНрдЯреЗрдб рдмреНрд▓реЙрдХреЛрдВ рдХреЗ рд╣реЛрддреЗ рд╣реИрдВред рдЙрддреНрдкрдиреНрди рдЕрдиреБрдХреНрд░рдо рдХреЗ рдЕрдЧрд▓реЗ рддрддреНрд╡ рдХреА рднрд╡рд┐рд╖реНрдпрд╡рд╛рдгреА рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдорд▓рд╛рд╡рд░ рдХреЛ рдПрдиреНрдХреНрд░рд┐рдкреНрд╢рди рдХреБрдВрдЬреА рдХреЛ рдЦреЛрд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЕрд░реНрдерд╛рддред рдпреЛрдЬрдирд╛ рдореЗрдВ рдкреНрд░рдпреБрдХреНрдд рдмреНрд▓реЙрдХ рд╕рд┐рдлрд░ рдХреЛ рддреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╛рд░реНрдп рдХреЛ рдХрдо рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдирд┐рд╖реНрдХрд░реНрд╖


рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдореИрдВ рдЗрд╕ рддрд░рд╣ рдХреЗ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рд╕реНрдерд╛рдкрд┐рдд PRNGs рдХреА рдХреНрд░рд┐рдкреНрдЯреЛрдЧреНрд░рд╛рдлрд┐рдХ рдЕрд╡рд┐рд╢реНрд╡рд╕рдиреАрдпрддрд╛ рдХреЛ рд░реЗрдЦреАрдп рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рд░рдЬрд┐рд╕реНрдЯрд░реЛрдВ рдФрд░ Mersenne рдмрд╡рдВрдбрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ред
рдпреЗ рджреЛрдиреЛрдВ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдЙрдЪреНрдЪ рдЧрддрд┐ рд╕реЗ рдЕрдиреБрдХреВрд▓ рд░реВрдк рд╕реЗ рдкреНрд░рддрд┐рд╖реНрдард┐рдд рд╣реИрдВред рд╡реЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЕрдЪреНрдЫреЗ рдХреНрд░рдо рдЙрддреНрдкрдиреНрди рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рд░реВрдк рд╕реЗ рд╕рд╛рдВрдЦреНрдпрд┐рдХреАрдп рд░реВрдк рд╕реЗ рдЕрдкреНрд░рднреЗрджреНрдп рд╣реЛрддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди, рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдЬрдм рдпрд╣ рдХреНрд░рд┐рдкреНрдЯреЛрдЧреНрд░рд╛рдлреА рдХреА рдмрд╛рдд рдЖрддреА рд╣реИ, рддреЛ рдпрд╣ рдЕрдХреНрд╕рд░ рдкрд░реНрдпрд╛рдкреНрдд рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ рдФрд░ рдпрд╣ рдзреАрдореА, рд▓реЗрдХрд┐рди рдмрд╣реБрдд рдЕрдзрд┐рдХ рд╕реБрд░рдХреНрд╖рд┐рдд рддрд░реАрдХреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реИред

Source: https://habr.com/ru/post/In196442/


All Articles