diff options
author | Anton Luka Šijanec <anton@sijanec.eu> | 2024-01-05 19:46:28 +0100 |
---|---|---|
committer | Anton Luka Šijanec <anton@sijanec.eu> | 2024-01-05 19:46:28 +0100 |
commit | d2e03945e00795d68fca77e1c1978376d06a3156 (patch) | |
tree | f8892b6a986c1c2db7e893618094e7491d0b5f09 /šola/la/dn4/gcd.r | |
parent | Merge branch 'master' of ssh://ni/var/lib/git/sijanec/r (diff) | |
download | r-d2e03945e00795d68fca77e1c1978376d06a3156.tar r-d2e03945e00795d68fca77e1c1978376d06a3156.tar.gz r-d2e03945e00795d68fca77e1c1978376d06a3156.tar.bz2 r-d2e03945e00795d68fca77e1c1978376d06a3156.tar.lz r-d2e03945e00795d68fca77e1c1978376d06a3156.tar.xz r-d2e03945e00795d68fca77e1c1978376d06a3156.tar.zst r-d2e03945e00795d68fca77e1c1978376d06a3156.zip |
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)) +} |