Теория
Пусть $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$:
- Возьмём образующий элемент $Z_n$, например $\overline{1}$
- Определим её порядок
- Пусть $f(\overline{1}) = \overline{t}$, найдём все такие t
- $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}$
- Найти все такие t (можно просто перебором, и смотреть, делит или не делит)
- Тогда гомоморфизмы такие:
- $f(\overline{1}) = t_1$
- $f(\overline{1}) = t_2$
- и так далее