Теория

Пусть $f:Z_n \rightarrow Z_m$ — гомоморфизм.

$\forall g \in G: ord_{Z_m}f(g) \space | \space ord_{Z_n}g$

$ord\space g^k = \frac{ord \space g}{(ord \space g, k)}, \space | \space ord_{Z_n}\overline{1}$

Алгоритм

Тогда алгоритм нахождения всех гомоморфизмов $f:Z_n \rightarrow Z_m$:

  1. Возьмём образующий элемент $Z_n$, например $\overline{1}$
  2. Определим её порядок
  3. Пусть $f(\overline{1}) = \overline{t}$, найдём все такие t
  4. $ord \space \overline{t} = ord \space (\overline{1}*t) = \frac{ord_{Z_m} \overline{1}}{(ord_{Z_m} \overline{1}, t)} \space | \space ord_{Z_n}\overline{1}$
  5. Найти все такие t (можно просто перебором, и смотреть, делит или не делит)
  6. Тогда гомоморфизмы такие:
    1. $f(\overline{1}) = t_1$
    2. $f(\overline{1}) = t_2$
    3. и так далее