非题解 仅仅是自己的个人思路!!!
希望能为你提供一些思路,目前不确定正确与否,大家有更好好的思路也可以一起讨论~~~
目录
A:斐波那契与7
解题思路:
- 当前项个位 只与前两项的个位有关 (十位百位... 相加 影响不到个位)
- 那么当相邻两项的个位在之前出现过时 即又会反复1 1 2 3 5... 即会周期循环下去
思考:要想后面项的个位又重复出现3 5 那么前面两项 必然是1 2 而1 2 两项前面又必然是 0 1
所以可以发现 0 1 1 2 3 5 是绑定死的 所以可以判断下一次出现1 1 即为下一次周期的开始
#ans:26960268160
#暴力:返回1-n项之间的数列7的个数
def fun1(n):
res = 0
a,b = 1,1
for i in range(3,n + 1):
if (a + b) % 10 == 7:res += 1
a,b = b,(a + b) % 10
return res
#利用周期性:返回1-n项之间的数列7的个数
def fun2(n):
res = 0
res = (n // 60) * 8 + fun1(n % 60)
return res
if __name__ == "__main__":
n = int(input().strip())
print("fun2",fun2(n))
## 以下是我找周期和计算该周期里7的个数的过程
## Set,a,b,t = ['1 1'],1,1,0
## while True:
## s = str(b % 10) + ' ' + str((a + b) % 10)
## if s in Set:break
## else:Set.append(s)
## a,b = b,a + b
## if b % 10 == 7:t += 1
## print(t,len(Set))
## print(fun1(n % 61))
B:小蓝做实验
解题思路