Cipolla's algorithm: Difference between revisions
Content added Content deleted
(Realize in F#) |
|||
Line 349: | Line 349: | ||
|_->let n,i=Seq.item α fE in ((Πn*n+Πi*i*b)%g) |
|_->let n,i=Seq.item α fE in ((Πn*n+Πi*i*b)%g) |
||
if fN 1I n ((g-1I)/2I) g<>1I then None else Some(fL 1I 0I 0 ((g+1I)/2I)) |
if fN 1I n ((g-1I)/2I) g<>1I then None else Some(fL 1I 0I 0 ((g+1I)/2I)) |
||
</lang> |
|||
===The Task=== |
|||
<lang fsharp> |
|||
let test=[(10I,13I);(56I,101I);(8218I,10007I);(8219I,10007I);(331575I,1000003I);(665165880I,1000000007I);(881398088036I,1000000000039I);(34035243914635549601583369544560650254325084643201I,10I**50+151I)] |
|||
test|>List.iter(fun(n,g)->match Cipolla n g with Some r->printfn "Cipolla %A %A -> %A (%A) check %A" n g r (g-r) ((r*r)%g) |_->printfn "Cipolla %A %A -> has no result" n g) |
|||
</lang> |
</lang> |
||
{{out}} |
{{out}} |
||
Line 362: | Line 367: | ||
Real: 00:00:00.089, CPU: 00:00:00.090, GC gen0: 2, gen1: 0 |
Real: 00:00:00.089, CPU: 00:00:00.090, GC gen0: 2, gen1: 0 |
||
</pre> |
</pre> |
||
=={{header|FreeBASIC}}== |
=={{header|FreeBASIC}}== |
||
===LongInt version=== |
===LongInt version=== |