summaryrefslogtreecommitdiffstats
path: root/šola/la/dn4/gcd.r
diff options
context:
space:
mode:
authorAnton Luka Šijanec <anton@sijanec.eu>2024-01-05 19:46:28 +0100
committerAnton Luka Šijanec <anton@sijanec.eu>2024-01-05 19:46:28 +0100
commitd2e03945e00795d68fca77e1c1978376d06a3156 (patch)
treef8892b6a986c1c2db7e893618094e7491d0b5f09 /šola/la/dn4/gcd.r
parentMerge branch 'master' of ssh://ni/var/lib/git/sijanec/r (diff)
downloadr-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.r29
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))
+}