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===