Otherwise,
 with 
s=v.size()
 and  
n=end−begin,
 fills the supplied range 
[begin,end)
 according to the following algorithm
 in which
 each operation is to be carried out modulo 
232,
 each indexing operator applied to 
begin is to be taken modulo 
n,
 and 
T(x) is defined as 
x xor(x rshift27):
By way of initialization,
   set each element of the range to the value 
0x8b8b8b8b.  Additionally,
   for use in subsequent steps,
   let p=(n−t)/2
   and let q=p+t,
   where
   
t=(n≥623) ? 11 : (n≥68) ? 7 : (n≥39) ? 5 : (n≥7) ? 3 : (n−1)/2;
With 
m as the larger of 
s+1 and 
n,
   transform the elements of the range:
   iteratively for 
k=0,…,m−1,
   calculate values
   
r1=1664525⋅T(begin[k]xorbegin[k+p]xorbegin[k−1])r2=r1+⎧⎪⎨⎪⎩s, k=0kmodn+v[k−1], 0<k≤skmodn, s<k
   and, in order,
   increment 
begin[k+p] by 
r1,
   increment 
begin[k+q] by 
r2,
   and
   set 
begin[k] to 
r2.Transform the elements of the range again,
   beginning where the previous step ended:
   iteratively for 
k=m,…,m+n−1,
   calculate values
   
r3=1566083941⋅T(begin[k]+begin[k+p]+begin[k−1])r4=r3−(kmodn)
   and, in order,
   update 
begin[k+p] by xoring it with 
r3,
   update 
begin[k+q] by xoring it with 
r4,
   and
   set 
begin[k] to 
r4.