C 一组数的最高模

C 一组数的最高模,c,permutation,modulo,C,Permutation,Modulo,我写了一些代码,它遍历给定数字的所有置换,并返回具有最高模8的置换 我现在想知道的是,是否有一个算法/规则集,通过它我可以自动排除模数不能高于当前数字8的排列 我一直在考虑这个问题,但我不知道该怎么做,但我确信可以做一些事情来优化检查的排列数量 模运算不是我的强项 如果您有任何想法,请提前感谢 没有比这更快的方法了 如果这个数字不是2的幂,那么速度会很慢,但是编译器知道如何处理这个问题,因为y=x%8与y=x&0x7。因此,它只需要两个操作就可以完成这项工作:首先提取3个LSBIT,然后进行比较

我写了一些代码,它遍历给定数字的所有置换,并返回具有最高模8的置换

我现在想知道的是,是否有一个算法/规则集,通过它我可以自动排除模数不能高于当前数字8的排列

我一直在考虑这个问题,但我不知道该怎么做,但我确信可以做一些事情来优化检查的排列数量

模运算不是我的强项


如果您有任何想法,请提前感谢

没有比这更快的方法了

如果这个数字不是2的幂,那么速度会很慢,但是编译器知道如何处理这个问题,因为
y=x%8
y=x&0x7。因此,它只需要两个操作就可以完成这项工作:首先提取3个LSBIT,然后进行比较


这里没有可能的微优化。

什么是数字的排列?你能展示一下你的尝试吗?如果我理解正确,例如,你有一个数组{2,3,4},你正在尝试所有可能的模运算,比如2%3,2%4,3%2,3%4,4%2和4%3?你是指给定数量的元素的排列吗?但即使这就是你的意思,我也不知道模8如何适合这幅图。我猜你想要的数字可以通过对给定数字(如{123,12,213,231,312,321})的数字进行排列得到。此外,我猜你会得到一个“超过时间限制”的在线比赛<代码>:)
如果是:1000≡ 0(mod 8),因此如果您有n个数字的长数字,则选择所有3位组合就足够了,其中有n!/(n)− 3)!