题目描述

B 君有两个好朋友,他们叫宁宁和冉冉。有一天,冉冉遇到了一个有趣的题目:输入 b;d;n,求

输入

一行三个整数 b;d;n

输出

一行一个数表示模 7528443412579576937 之后的结果。

样例输入

1 5 9

样例输出

76

提示

其中 0<b^2<=d<(b+1)^2<=10^18,n<=10^18,并且 b mod 2=1,d mod 4=1


题解

数论 高中数学

注意题目中给出的0<b^2<=d<(b+1)^2,这说明了什么?

就是在变相的告诉我们b<=√d<b+1,也就是-1<b-√d<=0,即0<=|b-√d|<1。

那么0<=|b-√d|^n<1,可以看出这个数对整数部分的影响是常数级的。

不妨设

那么an一定恒为整数。

将n=1代入,可知两个±号一定相同,于是只有2种情况

再由通项公式求递推公式,发现只有一种情况符合条件,即:

,通项公式为

根据题目条件b mod 2=1,d mod 4=1可知前面的系数都为整数,于是可以矩阵乘法来推。

推完之后再讨论后一项的影响即可。

ps: n可能等于0,所以需要特判或者从a0开始推。

ps2: 题目中mod较大,需要用到unsigned long long和快速乘

  1. #include <cstdio>
  2. #include <cstring>
  3. #include <algorithm>
  4. #define mod 7528443412579576937ull
  5. using namespace std;
  6. typedef unsigned long long ull;
  7. ull qmul(ull x , ull y)
  8. {
  9. ull ans = 0;
  10. while(y)
  11. {
  12. if(y & 1) ans = (ans + x) % mod;
  13. x = (x + x) % mod;
  14. y >>= 1;
  15. }
  16. return ans;
  17. }
  18. struct matrix
  19. {
  20. int n , m;
  21. ull num[2][2];
  22. matrix()
  23. {
  24. n = m = 0 , memset(num , 0 , sizeof(num));
  25. }
  26. matrix operator*(matrix a)
  27. {
  28. matrix t;
  29. t.n = n , t.m = a.m;
  30. int i , j , k;
  31. for(i = 0 ; i < t.n ; i ++ )
  32. for(j = 0 ; j < t.m ; j ++ )
  33. for(k = 0 ; k < m ; k ++ )
  34. t.num[i][j] = (t.num[i][j] + qmul(num[i][k] , a.num[k][j])) % mod;
  35. return t;
  36. }
  37. }A , B;
  38. matrix qpow(matrix x , ull y)
  39. {
  40. matrix t;
  41. t.n = x.n , t.m = x.m;
  42. int i;
  43. for(i = 0 ; i < x.n ; i ++ )
  44. t.num[i][i] = 1;
  45. while(y)
  46. {
  47. if(y & 1) t = t * x;
  48. x = x * x;
  49. y >>= 1;
  50. }
  51. return t;
  52. }
  53. int main()
  54. {
  55. ull b , d , n , x , y , ans;
  56. scanf("%llu%llu%llu" , &b , &d , &n);
  57. x = b , y = (d - b * b) / 4;
  58. A.n = 1 , A.m = 2 , A.num[0][0] = 2 , A.num[0][1] = b;
  59. B.n = 2 , B.m = 2 , B.num[0][1] = y , B.num[1][0] = 1 , B.num[1][1] = x;
  60. ans = (A * qpow(B , n)).num[0][0];
  61. if(y && n % 2 == 0) ans = (ans + mod - 1) % mod;
  62. printf("%llu\n" , ans);
  63. return 0;
  64. }

【bzoj4002】[JLOI2015]有意义的字符串 数论+矩阵乘法的更多相关文章

  1. BZOJ_4002_[JLOI2015]有意义的字符串_矩阵乘法

    BZOJ_4002_[JLOI2015]有意义的字符串_矩阵乘法 Description B 君有两个好朋友,他们叫宁宁和冉冉.有一天,冉冉遇到了一个有趣的题目:输入 b;d;n,求 Input 一行 ...

  2. [BZOJ4002][JLOI2015]有意义的字符串-[快速乘法+矩阵乘法]

    Description 传送门 Solution 由于这里带了小数,直接计算显然会爆掉,我们要想办法去掉小数. 而由于原题给了暗示:b2<=d<=(b+1)2,我们猜测可以利用$(\fra ...

  3. BZOJ4002 [JLOI2015]有意义的字符串

    据说这两场加起来只要170= =而这是最简单的题目了QAQ 看到$(\frac {b + \sqrt {d} } {2} )^n$,第一反应是共轭根式$(\frac {b - \sqrt {d} } ...

  4. bzoj4002 [JLOI2015]有意义的字符串 快速幂

    Description B 君有两个好朋友,他们叫宁宁和冉冉. 有一天,冉冉遇到了一个有趣的题目:输入 b;d;n,求((b+sqrt(D)/2)^N的整数部分,请输出结果 Mod 752844341 ...

  5. bzoj4002 [JLOI2015]有意义的字符串 特征根+矩阵快速幂

    题目传送门 https://lydsy.com/JudgeOnline/problem.php?id=4002 题解 神仙题. 根据下面的一个提示: \[ b^2 \leq d \leq (b+1)^ ...

  6. BZOJ4002 [JLOI2015]有意义的字符串 【数学 + 矩乘】

    题目链接 BZOJ4002 题解 容易想到\(\frac{b + \sqrt{d}}{2}\)是二次函数\(x^2 - bx + \frac{b^2 - d}{4} = 0\)的其中一根 那么就有 \ ...

  7. 【BZOJ4002】[JLOI2015]有意义的字符串(数论,矩阵快速幂)

    [BZOJ4002][JLOI2015]有意义的字符串(数论,矩阵快速幂) 题面 BZOJ 洛谷 题解 发现我这种题总是做不动... 令\(A=\frac{b+\sqrt d}{2},B=\frac{ ...

  8. 【BZOJ4002】[JLOI2015]有意义的字符串 数学

    [BZOJ4002][JLOI2015]有意义的字符串 Description B 君有两个好朋友,他们叫宁宁和冉冉.有一天,冉冉遇到了一个有趣的题目:输入 b;d;n,求 Input 一行三个整数 ...

  9. [JLOI2015]有意义的字符串

    4002: [JLOI2015]有意义的字符串 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 1000  Solved: 436[Submit][St ...

随机推荐

  1. POCO TCPServer 解析

    POCO C++ Libraries提供一套 C++ 的类库用以开发基于网络的可移植的应用程序,功能涉及线程.文件.流,网络协议包括:HTTP.FTP.SMTP 等,还提供 XML 的解析和 SQL ...

  2. JavaScript--获取页面盒子中鼠标相对于盒子上、左边框的坐标

    分析: 外层边框是浏览器边框,内部盒子是页面的一个盒子,绿点是盒子中鼠标的位置.鼠标相对盒子边框的坐标=页面中(注意不是浏览器)鼠标坐标-盒子相对于浏览器边框的偏移量 第一步:求浏览器边框位置 x=e ...

  3. java简单web爬虫(网页图片)

    java简单web爬虫(网页图片)效果,执行main()方法后图片就下载道C盘的res文件夹中.没有的话创建一个文件夹代码里的常量根据自己的需求修改,代码附到下面. package com.sinit ...

  4. web前端总结面试问题(理论)

    一个页面从输入url到页面显示加载完成,这个过程发生了什么? 1.浏览器根据请求的URL交给DNS域名解析,找到真实的IP,向服务器发起请求. 2.服务器交给后台处理完成后返回数据,浏览器接收文件(h ...

  5. phpstorm代码提示不小心关了,如何开启

    在phpstrom右下角单击如图 ​ 出现event log窗口 ​ 如果不是​ 单击切换取消节电模式即可开启代码提示.

  6. JAVA Web 项目中用到的技术

    JSPServletTomcatMySQL MavenSpringMVCHibernatejQueryBootstrapAngularJSBootStrap Table 下边两个是移动APP开发要用到 ...

  7. Go web表单

    package main import ( "fmt" "html/template" "log" "net/http" ...

  8. Servlet生命周期与线程安全

    上一篇介绍了Servlet初始化,以及如何处理HTTP请求,实际上在这两个过程中,都伴随着Servlet的生命周期,都是Servlet生命周期的一部分.同时,由于Tomcat容器默认是采用单实例多线程 ...

  9. PHP.43-TP框架商城应用实例-后台18-商品属性3-库存量管理

    库存量管理 思想:为商品的每个多选属性设置库存量!!要把多选属性排列组合分别指定库存量!! 效果如下:[由商品已经添加的属性决定] 1.建表goods_number{goods_id,goods_nu ...

  10. Delphi中Templates代码模板添加注意事项

    今天用Delphi中的代码模板添加一段代码,结果就是有问题,多次测试后,发现是编码需要注意. <?xml version="1.0" encoding="GB231 ...