Dla podanych parametrow generatora kwadratowego ustalić:
Średnią długość okresu
Maksymalną długość okresu
$$x_{n} = \left\lbrack x_{n - 1}^{2} \bullet m^{\frac{- s}{2}} \right\rbrack - \left\lbrack x_{n - 1}^{2} \bullet m^{\frac{- 3s}{2}} \right\rbrack \bullet m^{s}$$
[x] oznaczono całkowitą część liczby x
[112*10-1]-[112*10-3]*102
(121/10)-(121/1000)*100 (bierzemy część całkowitą)
12 – 0 = 12
[122*10-1]-[122*10-3]*102
[192*10-1]-[192*10-3]*102
[20612*10-1]-[20612*10-3]*102
20612= 04247721
362=1296
292=0841
842=7056
52=25
252=625
22=4
…
gk=function(x,m=10,s=4){
return(floor(x^2*m^(-s/2))-floor(x^2*m^(-3*s/2))*m^s)
}
m=10
s=4
gk=function(x,m=10,s=4){
return(floor(x^2*m^(-s/2))-floor(x^2*m^(-3*s/2))*m^s)
}
genk=function(x,m=10,s=4){
knt=T
while (knt) {
xn=gk(x[length(x)],m,s)
knt=(sum(x==xn)==0)
x=c(x,xn)
}
return(x[-length(x)])
}
m=10
s=4
>genk(…)
sum(genk(2011)==(2904))
a)
gk=function(x,m=10,s=4){
return(floor(x^2*m^(-s/2))-floor(x^2*m^(-3*s/2))*m^s)
}
genk=function(x,m=10,s=4){
knt=T
while (knt) {
xn=gk (x[length(x)],m,s)
knt=(sum(x==xn)==0)
x=c(x,xn)
}
return(x[-length(x)])
}
for
m=10
s=4
b)
gk=function(x,m=10,s=4){
return(floor(x^2*m^(-s/2))-floor(x^2*m^(-3*s/2))*m^s)
}
genk=function(x,m=10,s=4){
knt=T
while (knt) {
xn=gk(x[length(x)],m,s)
knt=(sum(x==xn)==0)
x=c(x,xn)
}
return(x[-length(x)])
}
m=10
s=2
dlg=vector()
for (i in 1:(m^s)) {
dlg[i]=length(genk(i-1,m,s))
}
sr=mean(dlg)
mx=max(dlg)
v=(dlg==mx)*(1:length(dlg))
najd=v[v!=0]-1
print(c(sr,mx,najd))