diff options
Diffstat (limited to 'šola/la/dn4/gcd.r')
-rw-r--r-- | šola/la/dn4/gcd.r | 29 |
1 files changed, 29 insertions, 0 deletions
diff --git a/šola/la/dn4/gcd.r b/šola/la/dn4/gcd.r new file mode 100644 index 0000000..5d10a40 --- /dev/null +++ b/šola/la/dn4/gcd.r @@ -0,0 +1,29 @@ +polygcd <- function (a, b) { + rp <- a + sp <- 1 + tp <- 0 + r <- b + s <- 0 + t <- 1 + while (any(r != 0)) { + print(list("debug"=list("r"=r, "s"=s, "t"=t))) + rs <- r + ss <- s + ts <- t + korak <- function (t, p) { + odstrani_ničle <- function (v) { + if (all(v == 0)) + return(v) + return(v[min(which(v!=0)):max(which(v!=0))]) + } + return(p-polymul(odstrani_ničle(t), polydiv(odstrani_ničle(r), odstrani_ničle(rp))$d)) + } + r <- korak(r, rp) + s <- korak(s, sp) + t <- korak(t, tp) + rp <- rs + sp <- ss + tp <- ts + } + return(list("r"=rp, "s"=sp, "t"=tp)) +} |