分析

https://www.cnblogs.com/cjyyb/p/10822490.html

代码

#include<bits/stdc++.h>
using namespace std;
#define int long long
const int g = ;
const int N = 2e5;
const int G = ;
const int mod = ;
int f[],a[],b[],fac[],inv[],val,A[],R,r[];
inline int pw(int x,int p){int res=;while(p){if(p&)res=res*x%mod;x=x*x%mod;p>>=;}return res;}
inline void ntt(int a[],int opt,int n){
int i,j,k,inv=pw(n,mod-),now,wn,w,p,q;
for(i=;i<n;i++)if(i<r[i])swap(a[i],a[r[i]]);
for(i=;i<n;i<<=){
now=(opt==?g:G),wn=pw(now,(mod-)/(i<<));
for(j=;j<n;j+=(i<<))
for(k=,w=;k<i;k++,w=w*wn%mod)
p=a[j+k],q=a[i+j+k]*w%mod,a[j+k]=(p+q)%mod,a[i+j+k]=(p-q+mod)%mod;
}
if(opt==-)for(i=;i<n;i++)a[i]=a[i]*inv%mod;
}
inline void go_to_work(int le,int ri){
if(le==ri)return;
int i,j,k,n,m=ri-le,len=,mid=(le+ri)>>;
go_to_work(le,mid);for(n=;n<=(m+)*;n<<=)len++;
for(i=;i<n;i++)r[i]=((r[i>>]>>)|((i&)<<(len-)));
for(i=;i<n;i++)a[i]=b[i]=;for(i=;i<=mid-le;i++)a[i]=f[i+le];
for(i=;i<=m;i++)b[i]=val*inv[i]%mod;ntt(a,,n),ntt(b,,n);
for(i=;i<n;i++)a[i]=a[i]*b[i]%mod;ntt(a,-,n);
for(i=mid+;i<=ri;i++)f[i]=(f[i]+a[i-le])%mod;
go_to_work(mid+,ri);return; }
signed main(){
int n,i,j,k,Ans=;
scanf("%lld%lld",&n,&R);
f[]=pw((-R+mod)%mod,mod-);
for(i=;i<=n;i++)scanf("%lld",&A[i]);
fac[]=;for(i=;i<=N;i++)fac[i]=fac[i-]*i%mod;
inv[N]=pw(fac[N],mod-);for(i=N-;i>=;i--)inv[i]=inv[i+]*(i+)%mod;
val=R*pw((-R+mod)%mod,mod-)%mod;go_to_work(,n);
for(i=;i<=n;i++)Ans=(Ans+f[i]*A[i]%mod*fac[i]%mod)%mod;
printf("%lld\n",Ans);return ;
}

p5349 幂的更多相关文章

  1. [luogu P5349] 幂 解题报告 (分治FFT)

    interlinkage: https://www.luogu.org/problemnew/show/P5349 description: solution: 设$g(x)=\sum_{n=0}^{ ...

  2. Luogu P5349 幂

    大力数学题,发现自己好久没写多项式水平急速下降,求逆都要写挂233 首先看到关于多项式的等比数列求和,我们容易想到先求出每一项的系数然后最后累加起来即可,即设\(f_i=\sum_{n=0}^{\in ...

  3. 矩阵快速幂 HDU 4565 So Easy!(简单?才怪!)

    题目链接 题意: 思路: 直接拿别人的图,自己写太麻烦了~ 然后就可以用矩阵快速幂套模板求递推式啦~ 另外: 这题想不到或者不会矩阵快速幂,根本没法做,还是2013年长沙邀请赛水题,也是2008年Go ...

  4. POJ1026 Cipher(置换的幂运算)

    链接:http://poj.org/problem?id=1026 Cipher Time Limit: 1000MS   Memory Limit: 10000K Total Submissions ...

  5. C语言 · 2的次幂表示

    问题描述 任何一个正整数都可以用2进制表示,例如:137的2进制表示为10001001. 将这种2进制表示写成2的次幂的和的形式,令次幂高的排在前面,可得到如下表达式:137=2^7+2^3+2^0 ...

  6. 51nod 算法马拉松18 B 非010串 矩阵快速幂

    非010串 基准时间限制:1 秒 空间限制:131072 KB 分值: 80 如果一个01字符串满足不存在010这样的子串,那么称它为非010串. 求长度为n的非010串的个数.(对1e9+7取模) ...

  7. hdu 4704 Sum (整数和分解+快速幂+费马小定理降幂)

    题意: 给n(1<n<),求(s1+s2+s3+...+sn)mod(1e9+7).其中si表示n由i个数相加而成的种数,如n=4,则s1=1,s2=3.                  ...

  8. 51nod1228 序列求和(自然数幂和)

    与UVA766 Sum of powers类似,见http://www.cnblogs.com/IMGavin/p/5948824.html 由于结果对MOD取模,使用逆元 #include<c ...

  9. UVA766 Sum of powers(1到n的自然数幂和 伯努利数)

    自然数幂和: (1) 伯努利数的递推式: B0 = 1 (要满足(1)式,求出Bn后将B1改为1 /2) 参考:https://en.wikipedia.org/wiki/Bernoulli_numb ...

随机推荐

  1. P1969积木大赛

    这是2018与2013提高组的真题,可怕,,原题出了两年,是个纯模拟. 读完题后就想写一个朴素的模拟,先遍历层数,再把达到层数的宽度#存起来,再判断是否连续,如果不连续ans++,然后每一次循环都要初 ...

  2. linux获取外网ip

    引言:目前获取ip的方法中,ifconfig和ip获取函数得到的都是内网ip.有时候需要获取外网ip,目前通用的做法,是向外部服务器发送请求,解析外部服务器响应,从而得到的自己的外网ip.linux下 ...

  3. object in javascript

    枚举对象属性 for....in 列举obj的可枚举属性,包括自身和原型链上的 object.keys() 只列举对象本身的可枚举属性 创建对象的几种方式 对象字面量 const pre='test' ...

  4. UIDynamic物理引擎

    iOS开发拓展篇—UIDynamic(简单介绍) 一.简单介绍 1.什么是UIDynamic UIDynamic是从iOS 7开始引入的一种新技术,隶属于UIKit框架 可以认为是一种物理引擎,能模拟 ...

  5. 使用impala连接hive踩坑过程

    一.打包镜像出错 docker build总是出错,如果你用的是python3.7,可以考虑使用python3.6版本 并且注意:选择thrift-sasl==0.2.1,否则会出现: Attribu ...

  6. 《Java核心技术卷I》——第3章 Java的基本程序设计结构

    byte和short类型主要用于特定的应用场合,例如,底层的文件处理或者需要控制占用存储空间量的大数组. 十六进制数值有一个前缀0x(如0xCAFE),八进制有一个前缀0,如010对应八进制中的8.很 ...

  7. Flask 框架app = Flask(__name__) 解析

    #!/usr/local/bin/python # coding=utf-8 from flask import Flask app = Flask(__name__) @app.route('/') ...

  8. socket客户端怎么判断http响应数据的结束

    前言 原文地址:https://blog.csdn.net/nimasike/article/details/81122784 http连接 短连接 定义:http头不包含Connection: Ke ...

  9. [易学易懂系列|golang语言|零基础|快速入门|(一)]

    golang编程语言,是google推出的一门语言. 主要应用在系统编程和高性能服务器编程,有广大的市场前景,目前整个生态也越来越强大,未来可能在企业应用和人工智能等领域占有越来越重要的地位. 本文章 ...

  10. Java并发-CycliBarrier

    栅栏类似于闭锁,它能阻塞一组线程直到某个事件的发生.栅栏与闭锁的关键区别在于,所有的线程必须同时到达栅栏位置,才能继续执行.闭锁用于等待事件,而栅栏用于等待其他线程.package com.examp ...