B题(数学题:

  问(1+sqrt(2)) ^n  能否分解成 sqrt(m) +sqrt(m-1)的形式 
如果可以 输出 m%1e9+7 否则 输出no  n<=1e18
  刚看题没思路 暴力一下吧 发现根本没有no的情况 那么就好办多了
所求的值序列为 1, 2, 9, 50, 289, 1682, 9801, 57122, 332929, 1940450, 11309769
设(1+sqrt(2)) ^n为 A_n+B_n*sqrt(2) ,则:
  A_n = A_(n-1)+2*B_(n-1)
  A_n = A_(n-1)+B_(n-1)
  那么所求值序列显然为A_n*A_n+(n&1)
我们需要求这个A_n 暴力肯定不行,看到上面的递推式可以想到矩阵快速幂---
这个矩阵构造也非常简单
/*
1 2      A_n    A_(n+1)
   *       =
1 1    B_n    B_(n+1)
*/
然后注意下细节
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cmath>
#include <vector>
#include <cstring>
#include <set>
#include <map>
using namespace std;
typedef long long ll;
inline void r(ll&num){
num=;ll f=;char ch=getchar();
while(ch<''||ch>''){if(ch=='-')f=-;ch=getchar();}
while(ch>=''&&ch<='')num=num*+ch-'',ch=getchar();
num*=f;
}
inline void r(int &num){
num=;int f=;char ch=getchar();
while(ch<''||ch>''){if(ch=='-')f=-;ch=getchar();}
while(ch>=''&&ch<='')num=num*+ch-'',ch=getchar();
num*=f;
}
const long long N = ;
const long long M = 1e9+;
struct Matr
{
long long line;
long long a[N+][N+];
Matr(){
line=;
a[][] = ; a[][] = ;
a[][] = ; a[][] = ;
}
};
Matr isit(Matr x,long long c) //矩阵初始化
{
for(long long i=;i<N;i++)
for(long long j=;j<N;j++)
x.a[i][j]=c;
return x;
} Matr Matlab(Matr x,Matr s) //矩阵乘法
{
Matr ans;
ans.line = x.line;
ans=isit(ans,);
for(long long i=;i<x.line;i++)
{
for(long long j=;j<x.line;j++)
{
for(long long k=;k<s.line;k++)
{
ans.a[i][j] = (ans.a[i][j]+x.a[i][k]*s.a[k][j])%M;
ans.a[i][j]=(ans.a[i][j]+M)%M;
}
}
}
return ans;
}
long long Fast_Matrix(Matr tmp,long long n)
{
if(n==)
return ;
if(n==)
return ;
if(n==)
return ;
n--;
Matr ans,ch;
ans.line = ;
ans.a[][] = ;
ans.a[][] = ;
ans.a[][] = ;
ans.a[][] = ;
while(n>)
{
if(n%)
{
ans=Matlab(ans,tmp);
}
tmp=Matlab(tmp,tmp);
n/=;
}
return (ans.a[][]+ans.a[][])%M;
}
int main()
{
Matr T;
long long n;
cin>>n;
long long x = Fast_Matrix(T,n);
cout<<(x*x+(n&))%M<<endl;
return ;
}

AC代码

 

最新文章

  1. [NOIP2016]愤怒的小鸟 D2 T3 状压DP
  2. C++_系列自学课程_第_7_课_数组_《C++ Primer 第四版》
  3. 在javascrit中怎样来刷新页面
  4. [java] 汇率换算器实现(2)
  5. Linux 服务器的网络配置 - 1. 查看 Linux 服务器的网络连接
  6. 在linux服务器上装svn版本管理,自动部署代码到项目
  7. 企业用户2T(含秒传),普通用户20G
  8. 重装mysql步骤
  9. 【HTTP】IE的URL的最大长度限制和如何解决URL最大长度的限制
  10. iOS 6分享列表——UIActivityViewController详解
  11. WebService之CXF注解报错(一)
  12. #if和#ifdef区别
  13. JavaScript高级程序设计---学习笔记(一)
  14. ssh整合开发
  15. 心路历程:当win10遇上win7激活程序...请默哀
  16. [translation]The rise of college ‘Grade Forgiveness’
  17. sqlserver 数据库插入汉字变成乱码的解决方案
  18. WordPress UpdraftPlus插件 Google Drive 备份
  19. JAVA面对对象(一)——封装
  20. hdu1505City Game(扫描线)

热门文章

  1. 1.6 Hive配置metastore
  2. python如何实现相对导入
  3. Unity json
  4. Ogre 整体框架入门
  5. MonogoDb的角色分类
  6. [Xcode 实际操作]八、网络与多线程-(21)延时启动画面:使用Thread线程对象的延时方法
  7. nil 与 release
  8. js对象—类型和属性特性
  9. 百度网盘不限速!VIP视频免费看!这两款插件被无数人安利!
  10. 微信小程序使用字体图标