diff --git a/hw.py b/hw.py new file mode 100644 index 0000000..029b759 --- /dev/null +++ b/hw.py @@ -0,0 +1,47 @@ +from fractions import gcd +class Modulo: + def __init__(self, n): + self.elems = list(range(n)) + self.n = n + self.reversibles = self.get_reversibles() + self.idempotent = self.get_idempotent() + self.zero_divisors = self.get_zero_divisors() + self.nilpotent = self.get_nilpotent() + '''elementy odwracalne to te, ktorych nwd z n jest rowne 1''' + def get_reversibles(self): + return list(filter(lambda x: gcd(x, self.n) == 1, self.elems)) + + '''nie rozwazamy elementow odwracalnych ani liczby 0 + #dzielnik zera nie moze byc elementem odwracalnym''' + def get_zero_divisors(self): + potential_zeros = [ elem for elem in self.elems if elem not in self.reversibles ][1:] + results = [] + for elem in potential_zeros: + for elem2 in potential_zeros: + if (elem * elem2) % self.n == 0: + results.append(elem) + break + return list(results) + + def get_idempotent(self): + '''element idempotentny => a^2 przystaje do a''' + return list(filter(lambda x: x*x % self.n == x, self.elems)) + + def get_nilpotent(self): + '''jesli pierscien nie zawiera dzielnikow zera, to nie zawiera takze elementow + nilpotentnych; wystarczy sprawdzic wsrod dzielnikow zera ''' + potential_nils = self.zero_divisors + phi = len(self.reversibles) #funkcja fi + results = [] + for elem in potential_nils: + for i in range(1, phi+1): + if elem**i % self.n == 0: + results.append(elem) + break + return results + +def main(): + m = Modulo(int(input())) + print([m.reversibles, m.zero_divisors, m.nilpotent, m.idempotent]) +if __name__ == '__main__': + main()