给定序列长度和模数计算皮萨诺周期
Calculate Pisano period given length of sequence and modulus
#This one doesn't work
def pisano(n,m):
lis=[]
for i in range(n+1):
if i<=1:
lis.append(i)
else:
lis.append((lis[i-2]+lis[i-1])%m)
if lis[-2:] == [0,1]:
pisanoo = len(lis)-2
rem = n%pisanoo
print(rem)
calc_fib(rem,m)
break
#This one works
def pisano(n,m):
lis=[0,1]
while True:
lis.append((lis[-2]+lis[-1])%m)
if lis[-2:] == [0,1]:
pisanoo = len(lis)-2
rem = n%pisanoo
print(rem)
calc_fib(rem,m)
break
在上面的代码片段中,'n' 是长度,'m' 是模数。我的第一个使用 'i' 作为迭代的函数失败了,
但是第二个函数当我删除 'i' 时,它成功地计算了皮萨诺周期。
有人能告诉我第一个出了什么问题吗?他们的逻辑似乎是 same.Thanks !
在第一个函数中,您正在搜索 n
个元素,因此如果 pisano 发生在稍后的索引处,您的函数将错过它。在第二个函数中,你有一个无限循环,因此你一直在搜索,直到找到 pisano。
例如 pisano(5,3)
发生在 len(lis) = 10
.
#This one doesn't work
def pisano(n,m):
lis=[]
for i in range(n+1):
if i<=1:
lis.append(i)
else:
lis.append((lis[i-2]+lis[i-1])%m)
if lis[-2:] == [0,1]:
pisanoo = len(lis)-2
rem = n%pisanoo
print(rem)
calc_fib(rem,m)
break
#This one works
def pisano(n,m):
lis=[0,1]
while True:
lis.append((lis[-2]+lis[-1])%m)
if lis[-2:] == [0,1]:
pisanoo = len(lis)-2
rem = n%pisanoo
print(rem)
calc_fib(rem,m)
break
在上面的代码片段中,'n' 是长度,'m' 是模数。我的第一个使用 'i' 作为迭代的函数失败了, 但是第二个函数当我删除 'i' 时,它成功地计算了皮萨诺周期。 有人能告诉我第一个出了什么问题吗?他们的逻辑似乎是 same.Thanks !
在第一个函数中,您正在搜索 n
个元素,因此如果 pisano 发生在稍后的索引处,您的函数将错过它。在第二个函数中,你有一个无限循环,因此你一直在搜索,直到找到 pisano。
例如 pisano(5,3)
发生在 len(lis) = 10
.