CF226C Anniversary
题目描述
距离著名意大利数学家 Leonardo Fibonacci 的 900 周年诞辰还有不到 60 年。当然,这样的重要纪念日需要大量的准备工作。
Dima 认为,能够在这个伟大的日子里学会解决下面这个问题一定非常棒:给定一个集合 $A$,它包含了从 $l$ 到 $r$ 的所有整数,即 $l, l+1, l+2, \ldots, r$;我们考虑所有由 $A$ 选取 $k$ 个元素组成的子集。对于每一个这样的子集,用子集中的元素作为下标,取出对应的 Fibonacci 数 $F_{i}$,然后求这些数的最大公约数。Dima 对于所有可能子集中上述最大公约数的最大值感兴趣。
Dima 想提醒你,Fibonacci 数列是一个数字序列,定义为 $F_1=1$,$F_2=1$,$F_n=F_{n-1} + F_{n-2}$,其中 $n \geq 3$。
Dima 还有半个多世纪可以思考这个问题,但你只有两个小时。请计算这个最大公约数对 $m$ 取余后的结果。
输入格式
第一行包含四个用空格分隔的整数 $m$、$l$、$r$ 和 $k$,满足 $1 \leq m \leq 10^9$,$1 \leq l < r \leq 10^{12}$,$2 \leq k \leq r-l+1$。
请不要在 C++ 中用 %lld 读写 64 位整数,推荐使用 cin、cout 流或者 %I64d。
输出格式
输出一个整数,表示所求最大公约数对 $m$ 取余的结果。
说明/提示
由 ChatGPT 5 翻译