(1) n是指要找该数列的第n项。

(2) 往vec中放入该数列前几项的值,越多越精确。

#include<set>
#include<cmath>
#include<vector>
#include<string>
#include<cstdio>
#include<cassert>
#include<cstring>
#include<algorithm>
using namespace std;
#define rep(i,a,n) for (ll i=a;i<n;i++)
#define per(i,a,n) for (ll i=n-1;i>=a;i--)
#define fi first
#define se second
#define pb push_back
#define mp make_pair
#define SZ(x) ((ll)(x).size())
#define all(x) (x).begin(),(x).end()
typedef long long ll;
typedef vector<ll> VI;
typedef pair<ll, ll> PII;
const ll mod=;
ll powmod(ll a, ll b)
{
ll res=;
a%=mod;
assert(b>=);
for(;b;b>>=)
{
if(b&)
res=res*a%mod;
a=a*a%mod;
}
return res;
}
ll _,n;
namespace linear_seq
{
const ll N=;
ll res[N],base[N],_c[N],_md[N];
vector<ll>Md;
void mul(ll*a,ll*b,ll k)
{
rep(i,,k+k) _c[i]=;
rep(i,,k) if(a[i]) rep(j,,k) _c[i+j]=(_c[i+j]+a[i]*b[j])%mod;
for(ll i=k+k-;i>=k;i--) if(_c[i])
rep(j,,SZ(Md)) _c[i-k+Md[j]]=(_c[i-k+Md[j]]-_c[i]*_md[Md[j]])%mod;
rep(i,,k) a[i]=_c[i];
}
ll solve(ll n, VI a, VI b)
{
ll ans=,pnt=;
ll k=SZ(a);
assert(SZ(a)==SZ(b));
rep(i,,k) _md[k--i]=-a[i]; _md[k]=;
Md.clear();
rep(i,,k) if(_md[i]!=) Md.push_back(i);
rep(i,,k) res[i]=base[i]=;
res[]=;
while((1ll<<pnt)<=n) pnt++;
for(ll p=pnt;p>=;p--)
{
mul(res,res,k);
if((n>>p)&)
{
for(ll i=k-;i>=;i--) res[i+]=res[i]; res[]=;
rep(j,,SZ(Md)) res[Md[j]]=(res[Md[j]]-res[k]*_md[Md[j]])%mod;
}
}
rep(i,,k) ans=(ans+res[i]*b[i])%mod;
if(ans<) ans+=mod;
return ans;
}
VI BM(VI s)
{
VI C(,),B(,);
ll L=,m=,b=;
rep(n,,SZ(s))
{
ll d=;
rep(i,,L+) d=(d+(ll)C[i]*s[n-i])%mod;
if(d==) ++m;
else if(*L<=n)
{
VI T=C;
ll c=mod-d*powmod(b,mod-)%mod;
while(SZ(C)<SZ(B)+m) C.pb();
rep(i,,SZ(B)) C[i+m]=(C[i+m]+c*B[i])%mod;
L=n+-L; B=T; b=d; m=;
}
else
{
ll c=mod-d*powmod(b,mod-)%mod;
while(SZ(C)<SZ(B)+m) C.pb();
rep(i,,SZ(B)) C[i+m]=(C[i+m]+c*B[i])%mod;
++m;
}
}
return C;
}
ll gao(VI a,ll n)
{
VI c=BM(a);
c.erase(c.begin());
rep(i,,SZ(c)) c[i]=(mod-c[i])%mod;
return solve(n,c,VI(a.begin(),a.begin()+SZ(c)));
}
};
int main()
{
int T;
scanf("%d",&T);
while(T--)
{
scanf("%lld", &n);
VI vec;
vec.push_back();
vec.push_back();
vec.push_back();
vec.push_back();
vec.push_back();
vec.push_back();
vec.push_back();
printf("%lld\n", linear_seq::gao(vec, n - )%mod);
}
}

最新文章

  1. JAVA 虚拟机钩子
  2. js子窗体、父窗体方法互调
  3. LINK : fatal error LNK1104: 无法打开文件“LIBCD.lib”
  4. JAVA中取子字符串的几种方式
  5. 如何通过ps -ef|grep tomcat只获得你需要的查询进程,排除掉grep本身的进程信息
  6. Restful API的设计与实践
  7. PartialView
  8. HDU 1573 X问题 (中国剩余定理)
  9. Jquery UI的datepicker插件使用方法
  10. 使用Chrome测试页面响应性
  11. sl4j记录
  12. C#可以直接调用的Win32API(和VCL做的整理工作非常类似)
  13. subllime text 创建可复用的代码片段
  14. sqlite ef6
  15. KMP算法的next[]数组通俗解释
  16. xampp lampp 改变网页root目录的方法
  17. gitlab-ci的注意点
  18. TestNG简单介绍以及安装—学习笔记1
  19. 【优化】bigpipe技术
  20. JQuery常用函数及功能

热门文章

  1. 解决PUTTY出现中文乱码问题
  2. 浅谈回归(二)——Regression 之历史错误翻译
  3. ie6 浏览器的bug
  4. C++ *this与this的区别(系个人转载,个人再添加相关内容)
  5. git rebase --onto详解
  6. SSIS -&gt;&gt; Environment Variables
  7. Eclipse 中 SVN 提交过滤
  8. OC NSMutableString的使用
  9. 如何用jstl的select标签做二级联动下拉列表框??
  10. Django中Settings中Templates的路径设置