ACM之数列循环节

这篇博客探讨了在ACM竞赛中遇到的数列循环节问题。作者最初尝试直接计算斐波那契数列导致时间超时或堆栈溢出。后来了解到应寻找循环节点,通过数学方法或编程解决。文章提供了两种解决方案,一种是数学运算法,另一种是针对小数据量的判断取余方法,并附带了相关公式和memset函数介绍,旨在帮助读者理解和解决此类问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这是杭电一道关于数列循环节的问题
初次接触这道题,我便想到了原来的写过的斐波拉契数列,便用一个个递推的函数从n一个一个的计算,直到运算出f[n]的值,结果呢,可想而知,不是时间超时,便是堆栈溢出!
后面才知道这种题一定存在一个循环的节点,而你所做的便是通过程序或这自己的计算得到出现循环的位置!下面通过代码解释:此题代码及详细解释

接下来这题也是数列循环节的问题
这里写图片描述

此题便既可以通过程序寻找循环的节点,亦可以同过数学运算得到循环的节点:
第一种方法:数学运算法
数学推导
可以发现这是从2开始每隔四个出现一次
于是代码为
找出规律代码简单
注意各大OJ ac的标准不是需要执行题中所给的各个步骤,只需要你在最后的时候得到的结果满足题目的要求就可以了!

接下来是一种较笨的方法,因为题中所给的数据并不算大,只到1000000,所以我们完全可以采取去不打印出它与3取余的结果,再判断输出,

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值