From 1d1b6f026a638649f36413ed705e9f339c78a974 Mon Sep 17 00:00:00 2001 From: Patryk Jagielski Date: Wed, 6 Jun 2018 22:17:49 +0000 Subject: [PATCH] zad 2. --- zad2.py | 68 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 68 insertions(+) create mode 100644 zad2.py diff --git a/zad2.py b/zad2.py new file mode 100644 index 0000000..457b3f6 --- /dev/null +++ b/zad2.py @@ -0,0 +1,68 @@ +def modulo(x,n): + for i in range(len(x)): + x[i] = x[i] % n + return x + +def iloczyn(f,g,n): + wynik = [0]*(len(f)+len(g)-1) + for i in range(len(f)): + for j in range(len(g)): + wynik[i+j] += f[i]*g[j] + return modulo(wynik,n) + +def liczmod(a,x,n): + for i in range(n): + if( (a*i) % n == x): + return(i) + return(-1) + +def sumujmod(a,b,n): + if(len(a) < len(b)): + wynik = b + for i in range(len(a)): + wynik[i] += a[i] + else: + wynik = a + for i in range(len(b)): + wynik[i] += b[i] + return modulo(wynik,n) + +def redukcjazer(x): + while x and x[-1] is 0: + x.pop() + return(x) + +def klasaReszt(f,g,n): + wynik = f + mnoznik = [0] * (len(f)-len(g)+2) + for i in range(len(f)): + if(liczmod(g[len(g)-1],wynik[len(f)-1-i],n) == -1): + return("DivisionError") + if(i > len(f)-len(g)): + return redukcjazer(modulo(wynik,n)) + else: + mnoznik.pop() + mnoznik.pop() + mnoznik.append(-1*liczmod(g[len(g)-1],wynik[len(f)-1-i],n)) + wynik = sumujmod(wynik, iloczyn(g, mnoznik ,n) ,n) + +def nwd(a,b,n): + while(b != []): + if(klasaReszt(a,b,n)): + return "DivisionError" + c = klasaReszt(a,b,n) + a = b + b = c + return modulo(a,n) + +def main(): + n = int(input("Podaj n: ")) + print("R[x] dla R = Z/"+str(n)) + f = eval(input("Podaj f w formacie listy np: [1,1, 0,1]: ")) + g = eval(input("Podaj f w formacie listy np: [1, 1,0,1]: ")) + print(iloczyn(f,g,n)) + print(klasaReszt(f,g,n)) + print(nwd(f,g,n)) + +if __name__ == "__main__": + main()