AcWing 1289. 序列的第k个数
. 序列的第个数
一、题目描述
在学等差数列和等比数列,当已知前三项时,就可以知道是等差数列还是等比数列。
现在给你 整数 序列的前三项,这个序列要么是等差序列,要么是等比序列,你能求出第 项的值吗?
如果第 项的值太大,对其取模 。
输入格式
第一行一个整数 ,表示有 组测试数据;
对于每组测试数据,输入前三项 ,然后输入 。
输出格式
对于每组数据,输出第 项取模 的值。
数据范围
输入样例
2
1 2 3 5
1 2 4 5
输出样例
5
16
二、:一个数列能不能即是等差数列又是等比数列?
结论:一个数列如果是即是等差又是等比,那么它必然是一个全等数列
证明:
设三个连续数字,
等差数列,所以 ①
等比数列,所以,所以 ②
将代入②
∴
由此可知,题目中给了数列的前三项,存在可能即是等差又是等比的情况,但此时就是一个全等数列,按哪个规则进行计算都是一样的结果,题目不缺少条件。
三、题意分析
-
等差数列
公差
第项,
第项,
第项,
...
第项,应该是,这个很好求,直接求然后注意取模就行了。 -
等比数列
公比
第项,
第项,
第项,
...
第项,这东西用 快速幂 就行了
四、理解与思考
数学的题,一般不会真的用代码去暴力计算,通常是推公式,证明。在完成公式的推导后,再用代码进行简单计算,比如 的第二题就是一道公式的推导题,小心下细节就行了。
- 快速幂:把次数依次化为进制,即可迭代
- 龟速乘:把当前数变为进制加起来,用于数据很大的情况
五、实现代码
#include <bits/stdc++.h>
using namespace std;
#define int long long
const int MOD = 200907;
// 快速幂
int qmi(int a, int b) {
int res = 1;
while (b) {
if (b & 1) res = res * a % MOD;
a = a * a % MOD;
b >>= 1;
}
return res;
}
signed main() {
int n;
cin >> n;
while (n--) {
int a, b, c, k;
cin >> a >> b >> c >> k;
if (a + c == b * 2) // 等差
cout << (a + (b - a) * (k - 1)) % MOD << endl; // 这个比较简单
else // 等比
cout << a * qmi(b / a, k - 1) % MOD << endl; // 这个需要快速幂
}
}
六、龟速乘版本
#include <bits/stdc++.h>
using namespace std;
#define int long long
const int MOD = 200907;
// 龟速乘,快速加
int qadd(int a, int b) {
int res = 0;
while (b) {
if (b & 1) res = (res + a) % MOD;
b >>= 1;
a = (a + a) % MOD;
}
return res;
}
// 快速幂
int qmi(int a, int b) {
int res = 1;
while (b) {
if (b & 1) res = (res * a) % MOD;
b >>= 1;
a = a * a % MOD;
}
return res;
}
signed main() {
int T;
cin >> T;
while (T--) {
int a, b, c, k;
cin >> a >> b >> c >> k;
if (a + c == b + b)
cout << (qadd(b - a, k - 1) + a) % MOD << endl; // 为等差即套公式,首项+公差*(项数-1)
else
cout << qmi(b / a, k - 1) * a % MOD << endl; // 等比数列用快速幂算末项
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!