1
0
forked from kalmar/DALGLI0

input z lini poleceń

This commit is contained in:
Patryk Jagielski 2018-06-07 09:15:18 +00:00
parent 1d1b6f026a
commit 3feef9f4af

139
zad2.py
View File

@ -1,68 +1,71 @@
def modulo(x,n): import sys
for i in range(len(x)): import ast
x[i] = x[i] % n
return x def modulo(x,n):
for i in range(len(x)):
def iloczyn(f,g,n): x[i] = x[i] % n
wynik = [0]*(len(f)+len(g)-1) return x
for i in range(len(f)):
for j in range(len(g)): def iloczyn(f,g,n):
wynik[i+j] += f[i]*g[j] wynik = [0]*(len(f)+len(g)-1)
return modulo(wynik,n) for i in range(len(f)):
for j in range(len(g)):
def liczmod(a,x,n): wynik[i+j] += f[i]*g[j]
for i in range(n): return modulo(wynik,n)
if( (a*i) % n == x):
return(i) def liczmod(a,x,n):
return(-1) for i in range(n):
if( (a*i) % n == x):
def sumujmod(a,b,n): return(i)
if(len(a) < len(b)): return(-1)
wynik = b
for i in range(len(a)): def sumujmod(a,b,n):
wynik[i] += a[i] if(len(a) < len(b)):
else: wynik = b
wynik = a for i in range(len(a)):
for i in range(len(b)): wynik[i] += a[i]
wynik[i] += b[i] else:
return modulo(wynik,n) wynik = a
for i in range(len(b)):
def redukcjazer(x): wynik[i] += b[i]
while x and x[-1] is 0: return modulo(wynik,n)
x.pop()
return(x) def redukcjazer(x):
while x and x[-1] is 0:
def klasaReszt(f,g,n): x.pop()
wynik = f return(x)
mnoznik = [0] * (len(f)-len(g)+2)
for i in range(len(f)): def klasaReszt(f,g,n):
if(liczmod(g[len(g)-1],wynik[len(f)-1-i],n) == -1): wynik = f
return("DivisionError") mnoznik = [0] * (len(f)-len(g)+2)
if(i > len(f)-len(g)): for i in range(len(f)):
return redukcjazer(modulo(wynik,n)) if(liczmod(g[len(g)-1],wynik[len(f)-1-i],n) == -1):
else: return("DivisionError")
mnoznik.pop() if(i > len(f)-len(g)):
mnoznik.pop() return redukcjazer(modulo(wynik,n))
mnoznik.append(-1*liczmod(g[len(g)-1],wynik[len(f)-1-i],n)) else:
wynik = sumujmod(wynik, iloczyn(g, mnoznik ,n) ,n) mnoznik.pop()
mnoznik.pop()
def nwd(a,b,n): mnoznik.append(-1*liczmod(g[len(g)-1],wynik[len(f)-1-i],n))
while(b != []): wynik = sumujmod(wynik, iloczyn(g, mnoznik ,n) ,n)
if(klasaReszt(a,b,n)):
return "DivisionError" def nwd(a,b,n):
c = klasaReszt(a,b,n) while(b != []):
a = b if(klasaReszt(a,b,n)):
b = c return "DivisionError"
return modulo(a,n) c = klasaReszt(a,b,n)
a = b
def main(): b = c
n = int(input("Podaj n: ")) return modulo(a,n)
print("R[x] dla R = Z/"+str(n))
f = eval(input("Podaj f w formacie listy np: [1,1, 0,1]: ")) def main():
g = eval(input("Podaj f w formacie listy np: [1, 1,0,1]: ")) n = int(sys.argv[1])
print(iloczyn(f,g,n)) f = ast.literal_eval(sys.argv[2])
print(klasaReszt(f,g,n)) g = ast.literal_eval(sys.argv[3])
print(nwd(f,g,n))
print(iloczyn(f,g,n))
if __name__ == "__main__": print(klasaReszt(f,g,n))
main() print(nwd(f,g,n))
if __name__ == "__main__":
main()