luogu P4994 终于结束的起点

题目背景

终于结束的起点
终于写下句点
终于我们告别
终于我们又回到原点
……

一个个 OIer 的竞赛生涯总是从一场 NOIp 开始,大多也在一场 NOIp 中结束,好似一次次轮回在不断上演。
如果这次 NOIp 是你的起点,那么祝你的 OI 生涯如同夏花般绚烂。
如果这次 NOIp 是你的终点,那么祝你的 OI 回忆宛若繁星般璀璨。
也许这是你最后一次在洛谷上打比赛,也许不是。
不过,无论如何,祝你在一周后的比赛里,好运。

当然,这道题也和轮回有关系。

题目描述

广为人知的斐波拉契数列fib(n) 是这么计算的

fib(0)=0;

fib(1)=1;

fib(n)=fib(n-1)+fib(n-2);

也就是 0, 1, 1, 2, 3, 5, 8, 13 ⋯,每一项都是前两项之和。

小 F 发现,如果把斐波拉契数列的每一项对任意大于 11 的正整数 MM 取模的时候,数列都会产生循环。

当然,小 F 很快就明白了,因为fib(n−1)modM 和fib(n−2)modM)最多只有 M ^ 2 种取值,所以在 M ^ 2 次计算后一定出现过循环。

甚至更一般地,我们可以证明,无论取什么模数 MM,最终模 MM 下的斐波拉契数列都会是 0,1,⋯,0,1,⋯。

现在,给你一个模数 M,请你求出最小的 n>0,使得 fib(n)modM=0,fib(n+1)modM=1。

输入输出格式

输入格式:

 

输入一行一个正整数 MM。

 

输出格式:

 

输出一行一个正整数 nn。

 

输入输出样例

输入样例#1: 复制

2

输出样例#1: 复制

3

输入样例#2: 复制

6

输出样例#2: 复制

24

说明

样例 1 解释

斐波拉契数列为 0,1,1,2,3,5,8,13,21,34,⋯,在对 22 取模后结果为 0, 1, 1, 0, 1, 1, 0, 1, 1, 0。 

我们可以发现,当 n=3 时,f(n) \bmod 2= 0, f(n + 1) \bmod 2 = 1也就是我们要求的 nn 的最小值。

数据范围

对于 30% 的数据,M≤18;

对于 70% 的数据,M≤2018;

对于 100% 的数据,2≤M≤706150=0xAC666

 

这题数据范围很水,暴力扫一遍就行。}这题数据范围很水,暴力扫一遍就行。但有一点要注意,数组要循环起来(三个就够了,定义为a,b,c),不然会爆内存。}但有一点要注意,数组要循环起来(三个就够了,定义为a,b,c),不然会爆内存。求斐波那契数列时要不停取模,否则到八九十就会爆long long。}求斐波那契数列时要不停取模,否则到八九十就会爆long long。最后附上核心代码:最后附上核心代码:

        a=b%m; 
        b=c%m; 
        c=(a+b)%m;//循环起来,超节省空间,记得不断模m,这点很重要。
        if(b==0&&c==1) break;//判断条件,输出符合条件的n;

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值