鉴于下面的3个序列,我希望能够将seqN映射到seq0。 seq1通过以下方式映射到seq0,seq2映射到seq1:
<a href="applied_jobs.php?delete_id=<?php echo $row['job_id']; ?>" onclick="return confirm('Delete this record?');" data-placement="top" data-toggle="tooltip" title="Delete Record" class="btn-danger btn-md pull-right"> <span class="glyphicon glyphicon-trash"></span></a>
例如,
seqN(i) = (seqN-1(i)*7)%27
现在,一种方法是递归地应用该函数。但这不是我的选择(这需要在硬件中实现)。我也不能保存最后一个序列的值来计算当前序列的值 - 我没有空间。
有没有办法使用数学方程式(不是递归函数)将seqN映射到seq0?
答案 0 :(得分:0)
除了@Nitpick所指出的(27%27 = 0,所以你要么停在26或使用28代替),你应该只使用一个力量:
seq N (i)=(seq 0 (i)* 7 N )%27
或者:
seq N (i)=(seq N-1 (i)* 7)%27 =(seq N-2 ( i)* 7 2 )%27 = ...... =(seq NN (i)* 7 N )%27
答案 1 :(得分:0)
不确定这是否有帮助,但某些seq_N(i) -> seq_/{N+/-1}(i)
的转换完全取决于以下一组周期:
List(0)
List(1, 7, 22, 19, 25, 13, 10, 16, 4)
List(2, 14, 17, 11, 23, 26, 20, 5, 8)
List(3, 21, 12)
List(6, 15, 24)
List(9)
List(18)
这样0 -> 0
,1 -> 7 -> 22 -> 19 -> 25 -> ...
等
根据这些周期,您可以采取数字位置并将其翻译为N % length_of_cycle
(仅处理循环包装)并获取原始数字。
我使用以下代码(用Scala编写)找到了这些循环:
val m = (0 to 26).map(x => (x, x * 7 % 27)).toMap
var cycles = (0 to 26).map(x => {
var x_i = x
val oot = scala.collection.mutable.ArrayBuffer(x)
while (m(x_i) != x)
{
x_i = m(x_i)
oot.append(x_i)
}
oot.toList
})
var filteredCycles = cycles.toArray
for (i <- (1 to 26))
{
val cycle = filteredCycles(i)
for (j <- (1 until cycle.size))
{
filteredCycles(cycle(j)) = List[Int]()
}
}
val uniqueCycles = filteredCycles.filter(_.size != 0)