예제 #1
0
    /* U=1/a mod 2^m - Arazi & Qi */
    private FF invmod2m()
    {
        int i, n = length;

        FF b = new FF(n);
        FF c = new FF(n);
        FF U = new FF(n);

        FF t;

        U.zero();
        U.v[0].copy(v[0]);
        U.v[0].invmod2m();

        for (i = 1; i < n; i <<= 1)
        {
            b.copy(this);
            b.mod2m(i);
            t = mul(U, b);
            t.shrw(i);
            b.copy(t);
            c.copy(this);
            c.shrw(i);
            c.mod2m(i);
            c.lmul(U);
            c.mod2m(i);

            b.add(c);
            b.norm();
            b.lmul(U);
            b.mod2m(i);

            c.one();
            c.shlw(i);
            b.revsub(c);
            b.norm();
            b.shlw(i);
            U.add(b);
        }
        U.norm();
        return(U);
    }