构造线性递推式+矩阵乘法


  题解戳PoPoQQQ

  

为了自己以后看的方便手打一遍好了>_>

  求$( \frac{b+\sqrt{d}}{2} )^n$的整数部分对p取模后的值

  其中$b\mod 2=1,d\mod 4=1,b^2 \leq d<(b+1)^2,n\leq10^{18}$

思路:

构造数列$a_n=b*a_{n-1}+\frac{d-b^2}{4}*a_{n-2}$

其中$a_0=2,a_1=b$

然后我们求出这个数列的通项公式,得到$a_n=(\frac{b+\sqrt{d}}{2})^n+(\frac{b-\sqrt{d}}{2})^n$

因此得到$(\frac{b+\sqrt{d}}{2})^n=a_n-(\frac{b-\sqrt{d}}{2})^n$

由于$b \mod 2=1, d \mod 4=1$,因此$\frac{d-b^2}{4}$一定是个正整数,故我们可以利用矩阵乘法来求出这个数列的第$n$项

然后对于$80\%$的数据$b^2\leq d <(b+1)^2$,对于$20\%$的数据$b=1,d=5$,因此$(\frac{b-\sqrt{d}}{2})^n \in (-1,0]$

故后面那一项对答案有贡献当且仅当 $d\not=b^2$且$n$为偶数

时间复杂度$O(log_2n)$

P.S.话说题目给的提示:题目名有意义的字符串“jxamfe”以及那个奇怪的模数我还是没明白提示在哪了……>_>我讨厌猜字谜QAQ

  1. /**************************************************************
  2. Problem: 4002
  3. User: Tunix
  4. Language: C++
  5. Result: Accepted
  6. Time:48 ms
  7. Memory:1272 kb
  8. ****************************************************************/
  9.  
  10. //Huce #5 A
  11. #include<cmath>
  12. #include<vector>
  13. #include<cstdio>
  14. #include<cstdlib>
  15. #include<cstring>
  16. #include<iostream>
  17. #include<algorithm>
  18. #define rep(i,n) for(int i=0;i<n;++i)
  19. #define F(i,j,n) for(int i=j;i<=n;++i)
  20. #define D(i,j,n) for(int i=j;i>=n;--i)
  21. using namespace std;
  22. typedef unsigned long long LL;
  23. LL getll(){
  24. LL v=,sign=; char ch=getchar();
  25. while(ch<''||ch>'') {if (ch=='-') sign=-; ch=getchar();}
  26. while(ch>=''&&ch<='') {v=v*+ch-''; ch=getchar();}
  27. return v*sign;
  28. }
  29. const int N=,INF=~0u>>;
  30. const LL MOD=7528443412579576937LL;
  31. /*******************tamplate********************/
  32. LL b,d,n;
  33. struct matrix{
  34. LL d[][];
  35. LL* operator [] (int x){ return d[x];}
  36. matrix(int x=){
  37. F(i,,) F(j,,)
  38. if (i==j && i) d[i][j]=x;
  39. else d[i][j]=;
  40. }
  41. }a;
  42. inline LL mul(LL a,LL b){
  43. LL r=;
  44. for(;b;b>>=,a=(a+a)%MOD)
  45. if (b&) r=(r+a)%MOD;
  46. return r;
  47. }
  48. inline matrix operator * (matrix a,matrix b){
  49. matrix c;
  50. F(i,,) F(j,,) F(k,,) (c[i][j]+=mul(a[i][k],b[k][j]))%=MOD;
  51. return c;
  52. }
  53. inline matrix Pow(matrix a,LL b){
  54. matrix r();
  55. for(;b;b>>=,a=a*a) if (b&) r=r*a;
  56. return r;
  57. }
  58. int main(){
  59. b=getll(); d=getll(); n=getll();
  60. a[][]=; a[][]=(d-b*b)/;
  61. a[][]=; a[][]=b;
  62. a=Pow(a,n);
  63. cout<<((a[][]*%MOD+mul(b,a[][])-(d!=b*b&&!(n&)))%MOD+MOD)%MOD<<endl;
  64. return ;
  65. }

4002: [JLOI2015]有意义的字符串

Time Limit: 10 Sec  Memory Limit: 128 MB
Submit: 54  Solved: 28
[Submit][Status][Discuss]

Description

B 君有两个好朋友,他们叫宁宁和冉冉。

有一天,冉冉遇到了一个有趣的题目:输入 b;d;n,求((b+sqrt(D)/2)^N的整数部分,请输出结果 Mod 7528443412579576937 之后的结果吧。

Input

一行三个整数 b;d;n

 

Output

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

Sample Input

1 5 9

Sample Output

76

HINT

0 <b^2 < d< (b +1)2 < 10^18。

Source

[Submit][Status][Discuss]

【BZOJ】【4002】【JLOI2015】有意义的字符串的更多相关文章

  1. bzoj 4002: [JLOI2015]有意义的字符串

    这个题... #include <bits/stdc++.h> #define rep(i, a, b) for (int i = a; i <= b; i++) #define d ...

  2. 【BZOJ】4002: [JLOI2015]有意义的字符串

    题意 求$\left \lfloor \left( \frac{b+\sqrt{d}}{2} \right)^n \right \rfloor \pmod {7528443412579576937} ...

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

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

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

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

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

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

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

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

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

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

  8. 【BZOJ4002】[JLOI2015]有意义的字符串 - 矩阵乘法

    题意: 给出b,d,n,求$\lfloor(\frac{b+\sqrt{d}}{2})^n\rfloor \mod 999999999999999989$(原题是7528443412579576937 ...

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

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

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

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

随机推荐

  1. Yii框架中使用PHPExcel导出Excel文件

    最近在研究PHP的Yii框架,很喜欢,碰到导出Excel的问题,研究了一下,就有了下面的方法: 1.首先在config\main.php中添加对PHPExcel的引用,我的方式是这样: 1 2 3 4 ...

  2. 一个php函数,能够遍历一个文件夹下的所有文件和子文件夹

    <?phpfunction my_scandir($dir){    $files=array();    if(is_dir($dir))     {        if($handle=op ...

  3. [Linux] Ubuntu Server 12.04 LTS 平台上搭建WordPress(Nginx+MySQL+PHP) Part IV

    接下来我们去下载 WorePress 用最新的 3.7.1 下载地址是:http://cn.wordpress.org/wordpress-3.7.1-zh_CN.zip 我们先建立一个文件夹 /va ...

  4. 搭通自己的电脑与GitHub的传输通道

    一.远程仓库怎么玩 1. 自己搭建一个运行Git的服务器 Git是分布式版本控制系统,同一个Git仓库,可以分布到不同的机器上,但肯定有一台机器有着最原始的版本库,然后别的机器来克隆这个原始版本库,这 ...

  5. IBM开发者 JSON 教程

    在异步应用程序中发送和接收信息时,可以选择以纯文本和 XML 作为数据格式.掌握 Ajax 的这一期讨论另一种有用的数据格式 JavaScript Object Notation(JSON),以及如何 ...

  6. 计算系数 (codevs 1137) 题解

    [问题描述] 给定一个多项式(ax + by)^k,给定a.b.k.n.m,请求出多项式展开后x^n y^m项的系数. [样例输入] 1 1 3 1 2 [样例输出] 3 [解题思路] 本题为NOIP ...

  7. 计算两条直线的交点(C#)

    PS:从其他地方看到的源码是有问题的.下面是修正后的 /// <summary> /// 计算两条直线的交点 /// </summary> /// <param name ...

  8. jquery.unobtrusive-ajax.js源码阅读

    /*! ** Unobtrusive Ajax support library for jQuery ** Copyright (C) Microsoft Corporation. All right ...

  9. GROUPING SETS、CUBE、ROLLUP

    其实还是写一个Demo 比较好 USE tempdb IF OBJECT_ID( 'dbo.T1' , 'U' )IS NOT NULL BEGIN DROP TABLE dbo.T1; END; G ...

  10. Android工具与其它

    文本文件: Tool: NotePad++ 代码工具: Tool:Eclipse+STAN+(乱七八糟c,c++,java,android),Source Insight 3 Log工具: Tool: ...