Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #euklideszi algoritmus
- function gcd([int32]$a,[int32]$b)
- {
- $max=if($a -ge $b){$a}else{$b}
- $min=if($a -le $b){$a}else{$b}
- while($min -gt 0)
- {
- $mod=$max%$min
- $max=$min
- $min=$mod
- }
- return $max
- }
- #ciklikus csoporton alapuló, nem elég jó megoldás
- function FirstRandomSequence([int32]$num,[int32]$mod)
- {
- [int32[]]$rs=@()
- $step=get-random -maximum $mod
- while((gcd $step $mod) -ne 1)
- {
- $step=($step+1)%$mod
- }
- $y=get-random -maximum $mod
- for($i=0;$i -lt $num;$i++)
- {
- $y+=$step
- $y%=$mod
- $rs+=$y
- }
- return $rs|sort
- }
- #intervallum felosztáson alapuló, nem elég jó megoldás
- function SecondRandomSequence([int32]$num,[int32]$mod)
- {
- [int32[]]$rs=@()
- $left=$mod
- $current=0
- for($i=0;$i -lt $num;$i++)
- {
- #$fmax=$left/$num
- #$fmax=$left/2
- #$fmax=$left/($num-$i)
- $fmax=$left*(1-((1/($num-$i))%1))
- #$fmax=$left-$num+$i
- $max=[int32]([math]::floor($fmax))
- $random=1
- if($max -gt 1)
- {
- $random=get-random -minimum 1 -maximum $max
- }
- $left-=$random
- $current+=$random
- $rs+=$current
- }
- return $rs|sort
- }
- #ciklikus csoporton és intervallum felosztáson alapuló algoritmus, közelítően jó megoldás
- function MyRandomSequence([int32]$num,[int32]$mod)
- {
- [int32[]]$rs=@()
- $step=get-random -maximum $mod
- while((gcd $step $mod) -ne 1)
- {
- $step=($step+1)%$mod
- }
- $left=$mod
- $current=get-random -maximum $mod
- for($i=0;$i -lt $num;$i++)
- {
- $fmax=$left*(1-((1/($num-$i))%1))
- $max=[int32]([math]::floor($fmax))
- $random=1
- if($max -gt 1)
- {
- $random=get-random -minimum 1 -maximum $max
- }
- $left-=$random
- $current+=$random*$step
- $current%=$mod
- $rs+=$current
- }
- return $rs|sort
- }
- #szokásos, elég jó megoldás (de nem teljes)
- function UsualRandomSequence([int32]$num,[int32]$mod)
- {
- [int32[]]$rs=@()
- for($i=0;$i -lt $num;$i++)
- {
- do
- {
- $random=get-random -maximum $mod
- } while($rs -contains $random)
- $rs+=$random
- }
- return $rs|sort
- }
- #algoritmusok tesztelésére szolgáló kód
- $ertek=@()
- $kulonbseg=@()
- for($i=0;$i -lt 90;$i++)
- {
- $ertek+=0
- $kulonbseg+=0
- }
- for($i=0;$i -le 9999;$i++)
- {
- $prev=0
- foreach($j in MyRandomSequence 5 90)
- {
- $ertek[$j]++
- $kulonbseg[$j-$prev]++
- $prev=$j
- }
- }
- "érték`tkülönbség"
- for($i=0;$i -lt 90;$i++)
- {
- "{0}`t{1}" -f $ertek[$i],$kulonbseg[$i]
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement