解题思路:

等差数列公式: an=a1+(n-1)d

等比数列公式:an=a1*q(n-1)


等比数列中的项数k能取到109得到的结果非常大,所以快速幂方法可以解决数据益出




快速幂

①如果b是奇数,ab=a*a(b-1)

②如果b是偶数,ab=a(b/2)*a(b/2)

举个例子210

210幂为10偶数先取25210=25*25
25幂为5奇数先取2425=2*24
24幂为4偶数先取2224=22*22
22幂为2偶数先取2122=21*21
21幂为1奇数先取2021=2*20
20=1然后从下向上回退计算,递归出口



注意事项:注意每一步结果都要取模,定义long long类型

参考代码:

#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
int quick(LL a,LL b,LL m)
{
	if(b==0)
	return 1;//如果b为0,那么a^0=1
	else if(b%2==1)//b为奇数,转换为b-1
	return a*quick(a,b-1,m)%m;
	else if(b%2==0)//b为偶数,转换为b/2
	{
		LL t=quick(a,b/2,m)%m;
	    return t*t%m;
	}
}
int main()
{
	int n;
	LL a,b,c,d;
	scanf("%d",&n);
	while(n--)
	{
		scanf("%lld%lld%lld%lld",&a,&b,&c,&d);
		if(a==b&&b==c)
		{
			printf("%lld\n",a%200907);	
		}
		else if(b-a==c-b)
		{
			printf("%lld\n",a+((d-1)%200907*(b-a)%200907)%200907);
		}
		else if(b/a==c/b)
		{
			printf("%lld\n",quick((b/a),d-1,200907)*a%200907);
		}
		
	}
}


点赞(0)
 

0.0分

3 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 0 条评论

暂无评论