python - 在 Python 中,从生成器构造循环子群

标签 python algorithm cyclic

在 Z 模 12 中使用加法,(也称为整数模 12,也称为 0 到 11):

1 generates [0,1,2,3,4,5,6,7,8,9,10,11] 

(从 0 开始,重复加 1;11+1 使我们回到 0)

同理:

2 generates [0,2,4,6,8,10]
3 generates [0 3 6 9]
9 generates [0,9,6,3] <-- notice order is important

如何在给定特定生成器的情况下创建子组?

最佳答案

我假设您指的是加法子群 Z * g,其中 Z 是整数集。如果你想要精确的顺序,只需计算它:

def subgroup(n, g):
    x = 0
    while True:
        yield x
        x = (x + g) % n
        if x == 0: 
            break

当然,如果顺序不重要,g 导出的子群是

{ G * k for k in xrange((n - 1) // G + 1) }

对于 G = gcd(g, n)

关于python - 在 Python 中,从生成器构造循环子群,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24063363/

相关文章:

python - Pip3 尝试安装在错误的 python 目录中

ios - 如何以百分比计算角色扮演游戏等级进度

java - 我执行 "Intersection of Two Linked Lists"的错误在哪里?

error-handling - 如何对已知的循环冗余校验值进行逆向工程?

python - 为 pandas 数据框的一列着色 : change in format

python - 类型错误:需要 float - Python

python - 无法找出 Heroku 应用程序失败的位置 [错误 : pg_config executable not found.]

algorithm - Prolog 程序的意外行为

r - 对循环数据使用 cut

C++双向链表 "delete tail"函数