【ybt高效进阶6-1-1】序列的第k个数(快速幂)

序列的第k个数

题目链接:ybt高效进阶6-1-1

题目大意

给你一个等差序列或等比序列的前三项,要你求第 k 项。

思路

等差就直接乘一下,等比就直接快速幂。

代码

#include<cstdio>
#define ll long long
#define mo 200907

using namespace std;

int T;
ll a, b, c, k;

ll ksm(ll x, ll y) {
	ll re = 1;
	while (y) {
		if (y & 1) re = (re * x) % mo;
		x = (x * x) % mo;
		y >>= 1;
	}
	return re;
}

int main() {
	scanf("%d", &T);
	while (T--) {
		scanf("%lld %lld %lld %lld", &a, &b, &c, &k);
		if (b - a == c - b) {
			printf("%lld\n", (a + (b - a) * (k - 1) % mo) % mo);
		}
		else {
			printf("%lld\n", (a * ksm(b / a, k - 1)) % mo);
		}
	}
	
	return 0;
}
上一篇:windows环境启用nginx失败问题查找


下一篇:在构造函数中,定义Foo.a,直接调用Foo.a之后获取到了什么