Fibonacci序列是一个众所周知的著名序列,其中每个连续元素都是前两个元素的和。模Fibonacci序列是相同的,只不过加法是在有限域上执行的,或者换句话说,在每次加法之后执行模运算。
例如,具有起始值1, 1和模数5的模块Fibonacci序列是:
1, 1, 2, 3, 0, 3, 3, 1, 4, 0, 4, 4, 3, 2, 0, 2, 2, 4, 1, 0, 1, 1, ...此时,该序列再次为1, 1,因此该序列将循环重复,循环长度为20。
您的挑战是找到一个特定的起始对和模数的(最小)周期长度,以最小字节为单位。
详细信息:初始值都在0 <= i,j < m范围内,其中m是模数。初始值不会都为零,模数至少为2。您可以以任何标准方式或格式,以任何顺序、功能、程序或类似方式输入,并通过返回或打印输出。适用标准漏洞。
First element, second element, modulus:
1, 1, 5 => 20
1, 1, 4 => 6
2, 4, 6 => 8
3, 3, 6 => 3这是代码高尔夫-最短的字节获胜代码。祝好运!
发布于 2015-07-18 14:28:08
g=lambda a,b,m,u=0:u!=(a,b)and-~g(b,(a+b)%m,m,u or(a,b))发布于 2015-07-18 11:39:15
a(A,B,M,R):-f([B,A],A,B,M,1,R).
f([A,B|T],X,Y,M,Z,R):-Z=0,Y=A,X=B,length(T,R);C is(A+B)mod M,f([C,A,B|T],X,Y,M,0,R).示例:a(1,1,5,R).输出R = 20 .
https://codegolf.stackexchange.com/questions/53342
复制相似问题