模pow(x,t)下多项式求逆

原创 2015年07月08日 19:17:32

题意:A(x) is known, A(x)*B(x)=1( mod pow(x,t) ),calculate B(x) ?
解法:先求t=[t/2]时的解为B0(x),然后经过数学处理可得到B(x)和B0(x)的关系。
详见博客http://picks.logdown.com/posts/189620-inverse-element-of-polynomial

const int mo = 1e9+7;
const int maxn = 100000+10;
int qpow(int a,int b,int mo){
    int ans=1;
    while(b){
        if(b&1) { ans=(ans*a)%mo; b--; }
        b>>=1,a=(a*a)%mo;
    }
    return ans;
}

//A(x) is known, A(x)*B(x)=1( mod pow(x,t) ),calculate B(x) ?
int tmp[maxn];
void getinv(int A[],int B[],int t){
    if(t==1){ B[0]=qpow(B[0],mo-2,mo); return; }
    getinv(A,B,(t+1)>>1);
    int k=1; for(;k<=(t+1)<<1;k<<=1);  int inv_k=qpow(k,mo-2,mo);
    for(int i=0;i<t;i++) tmp[i]=A[i]; for(int i=t;i<k;i++) tmp[i]=0;
    fft(tmp,k,0),fft(B,k,0);
    for(int i=0;i<k;i++) { tmp[i]=(2-(ll)tmp[i]*B[i]%mo+mo)%mo; }
    for(int i=0;i<k;i++) { B[i]=(ll)B[i]*tmp[i]%mo; }
    fft(B,k,1);
    for(int i=0;i<t;i++) { B[i]=(ll)B[i]*inv_k%mo; } for(int i=t;i<k;i++) B[i]=0;
}
版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

[概率DP][多项式取模] NOI2017.day1 T3 泳池

lzz写了题解,但是我没看懂… 就自己想了个DP f(i,j)表示高度为i,长度为j的局域,i这个行存在障碍,前i-1行不存在障碍,能选取的区域<=k的概率那么fi,j=∑k<jfi,k∗pi−1...

LeetCode 第 50 题 (Pow(x, n))

LeetCode 第 50 题 (Pow(x, n)) Implement pow(x, n). 这个题目非常简短,求 xnx^n。其中nn 为整数。 最简单的想法就是用一个循环,将 xx 自乘...

实现pow(double x, int n)

整理来源: http://bbs.csdn.net/topics/390511135 (由于0^0有争议,在这儿取0^0=0) // 依次乘以n次x的值得到最终结果 double Power1(do...

【LeetCode】50. Pow(x, n)

【LeetCode】50. Pow(x, n)

LeetCode 050 Pow(x,n)

记录自己的LeetCode刷题过程,总结刷题过程中的心得体会。 加深对类型转换的理解。 首先, int a=INT_MIN; 则 int b =-a; //b仍然为INT_MI...

DAY21:leetcode #50 Pow(x, n)

Implement pow(x, n). Subscribe to see which companies asked this question class Solution(object):...

Pow(x, n) -- LeetCode

原题链接: http://oj.leetcode.com/problems/powx-n/  这道题是一道数值计算的题目,因为指数是可以使结果变大的运算,所以要注意越界的问题。如同我在Sqrt(x)这...

Pow(x, n)

题目描述: Implement pow(x, n). 在进行该题目之前要先了解斐波那契数列的递归解法。 public class exercise { public static int Fi...

Single Number && Single Number II && Factorial Trailing Zeroes && Pow(x, n) && Add Two Numbers

Single Number 1、异或交换性质 int singleNumber(int A[], int n) { int ans = A[0]; for (i...

pow(x,y)函数的用法及实现算法

pow函数是求次方的函数, 函数原型是double pow(double a,double b); 使用时应包含math.h头文件。 1,C/C++中的数学函数编辑 原型:在TC2.0...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)