(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);
}
}

【模板】BM算法(找线性规律万能模板)的更多相关文章

  1. Berlekamp Massey算法求线性递推式

    BM算法求求线性递推式   P5487 线性递推+BM算法   待AC.   Poor God Water   // 题目来源:ACM-ICPC 2018 焦作赛区网络预赛 题意   God Wate ...

  2. LG5487 【模板】线性递推+BM算法

    [模板]线性递推+BM算法 给出一个数列 \(P\) 从 \(0\) 开始的前 \(n\) 项,求序列 \(P\) 在\(\bmod~998244353\) 下的最短线性递推式,并在 \(\bmod~ ...

  3. BM算法【实数模板】

    BM递推杜教版是在整数取模的情况下的, 这个可以求解实数系数,但是可能有精度误差. 若一个问题的结论是通过推线性递推式来解,考虑到实际的情况,可以用BM算法的模板,先输入项数再依次输入项,项越多越准确 ...

  4. BM求线性递推模板(杜教版)

    BM求线性递推模板(杜教版) BM求线性递推是最近了解到的一个黑科技 如果一个数列.其能够通过线性递推而来 例如使用矩阵快速幂优化的 DP 大概都可以丢进去 则使用 BM 即可得到任意 N 项的数列元 ...

  5. 数据结构:DHUOJ 单链表ADT模板应用算法设计:长整数加法运算(使用单链表存储计算结果)

    单链表ADT模板应用算法设计:长整数加法运算(使用单链表存储计算结果) 时间限制: 1S类别: DS:线性表->线性表应用 题目描述: 输入范例: -5345646757684654765867 ...

  6. 【最大流之EdmondsKarp算法】【HDU1532】模板题

    题意:裸的最大流,什么是最大流,参考别的博客 运用复杂度最高的EK算法 O(M*N),模板来自紫书 #include <cstdio> #include <cstdlib> # ...

  7. 图论算法-最小费用最大流模板【EK;Dinic】

    图论算法-最小费用最大流模板[EK;Dinic] EK模板 const int inf=1000000000; int n,m,s,t; struct node{int v,w,c;}; vector ...

  8. Makefile工程管理器及万能模板

    ​ Linux 环境下的程序员如果不会使用GNU make来构建和管理自己的工程,应该不能算是一个合格的专业程序员,至少不能称得上是 Unix程序员.在 Linux(unix )环境下使用GNU 的m ...

  9. maven把项目打包成jar包后找不到velocity模板的bug

    使用springmvc 开发时候要实现发送velcotiy模板邮件,在配置正常后,在本地测试正常后,使用maven打包成jar包后,报以下错误, Caused by: org.apache.veloc ...

随机推荐

  1. 使用electron构建跨平台Node.js桌面应用

    最近,把团队内经常使用的一个基于Node.js制作的小工具给做成了可视化操作的桌面软件,使用的是electron,这里简单分享一下使用electron的一些经验和心得. 一.如何使用electron把 ...

  2. php基础部分(1)

    PHP 输出文本的基础指令:echo 和 print.echo和print的区别echo是PHP语句, print和print_r是函数,语句没有返回值,函数可以有返回值(即便没有用)echo 输出一 ...

  3. Apache服务器运维笔记(1)----运行多个Apache服务器

    所有的Apache管理员都会遇到一个问题,就是在一台物理系统上运行多个版本的Apache服务器,或是运行多个同一版本的Apache服务器的副本,对于前者,在编译时为不同版本的Apache指定不同的安装 ...

  4. RoadFlowCore工作流2.8.1 更新日志

    1.2.8.1更新了2.8刚发布的一些小BUG. 2.2.8.1增加了移动端,基于微信企业号或企业微信. 详细请参阅官方网站:roadflow.net

  5. 【阿里云产品公测】在ACE上部署WP测试体验

      ACE服务其实已经有很多类似的服务提供商了,无论收费的还是免费的,  但是到现在为止还没有体验过,正好借着这次机会,来体验一下阿里云的ACE服务. ' !2NSv   /IQ$[WR cx   B ...

  6. python基础(二)--多值参数以及类

    1.多值参数函数 def 函数名(*args , **kwargs): ....... 多值参数函数顾名思义能够传入多个参数,args表示传入的元组,kwargs表示传入的字典 def functio ...

  7. 使用原生的javascript来实现轮播图

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  8. Python初学者第七天 字符串及简单操作

    7day 数据类型:字符串 1.定义 字符串是一个有序的字符的集合,用于储存和表示基本的文本信息.单.双.三引号之间的内容称之为字符串: a = ‘hello world!’ b = "你好 ...

  9. IEEP部署企业级网络工程-OSPF邻居关系故障排除

    OSPF邻居关系故障-现象与排除 一.OSPF邻居关系故障-现象与排除 1.OSPF建立邻居关系时,将检验hello报文中的Area ID .Autype.Authentication.network ...

  10. 【转】Linux中/etc/profile,/etc/bashrc,~/.profile,~/.bashrcd的区别

    //因为在原文章中博主说以下内容是网友说的,所以我就只加个转了,找不到原作者 /etc/profile,/etc/bashrc 是系统全局环境变量设定 ~/.profile,~/.bashrc用户家目 ...