hdu 2817 A sequence of numbers

骑猪看日落 2021-10-13 01:36 333阅读 0赞

hdu 2817 A sequence of numbers

  • 题意:
  • 题解
  • 源代码

传送门

题意:

  1. 现在有个序列,已知为等差数列,等比数列
  2. 给定4个数,a,b,c,k,前面3个数代码序列的首3a,b,c,求第k

题解

  1. 根据等差数列的性质,b - a = c-b,(由于在本题过程中a,b,c的范围较大,即使long long a+c == 2*b
  2. 判断会溢出),根据公式ak = (k-1)*d+a;其中d=b-a
  3. 求等比数列的时候,题目告诉,序列非递减,并且a,b,c为整数,所以公比q=b/c为整数
  4. 由于k较大,所以需要利用到快速幂

源代码

  1. #include<cstdio>
  2. using namespace std;
  3. typedef long long ll;
  4. const ll mod = 200907;
  5. ll quick(ll a,ll b){
  6. a%=mod;
  7. ll ans = 1;
  8. while(b){
  9. if(b&1)ans=ans*a%mod;
  10. a=a*a%mod;
  11. b>>=1;
  12. }
  13. return ans;
  14. }
  15. int main(){
  16. ll t,a,b,c,k;
  17. scanf("%lld",&t);
  18. while(t--){
  19. scanf("%lld%lld%lld%lld",&a,&b,&c,&k);
  20. if(b-a==c-b){
  21. printf("%lld\n",(((k-1)%mod*(b-a)%mod)%mod+a%mod)%mod);
  22. }else {
  23. printf("%lld\n",((a%mod)*quick(b/a,k-1))%mod);
  24. }
  25. }
  26. }

发表评论

表情:
评论列表 (有 0 条评论,333人围观)

还没有评论,来说两句吧...

相关阅读