Beispiel #1
0
QString restpolynomial::CanZas(int d, unboundInt k){//d degree, k times
    restpolynomial f(*this);
    unboundInt chara= f.charac();

    const restpolynomial zero(chara);
    QString res = "     ", hehe;

    unboundInt r, charac, facNum;
    int count, kar;
    kar = k.toInt();
    bool more = true;

    r = f.degree()/d;

    charac = f.leader().mod;

    rest one(1,chara), mem, nihil(chara), minusOne(chara);
    minusOne = minusOne-one;

    restpolynomial h(one);
    h.shift(d);
    QList<rest>::iterator iter = h.mons.begin();
    QList<rest>::iterator eraser = h.mons.begin();
    count = 0;

    while (facNum< r && more){

        if (f%h == zero){
            hehe = h.print();

            for (int i=0; i < kar; i++){
                res = res.append(hehe);
                res = res.append(", ");
            }
            facNum++;
            f = f/h;
        }

        while ((count < d) && ((*iter) == minusOne)){
            iter++;
            count++;
        }
        if (count >= d){more = false;}
        else{
            while (eraser != iter){
                *eraser = nihil;
                eraser++;
            }
            *iter = (*iter) + one;

            eraser = h.mons.begin();
            iter = h.mons.begin();
            count = 0;
        }
    }

    return res;
}
Beispiel #2
0
QString restpolynomial::EqDegFactor(unboundInt d){
    restpolynomial f, tmp(*this);
    f = tmp;

    unboundInt chara= f.charac();
    unboundInt one(1), count;
    unboundInt clara = chara;

    rest eins(one,chara);
    const rest zero(chara);

    rest minusOne(chara-one,chara);

    restpolynomial n(chara), m(chara), hilf(eins), master(zero), g(eins);
    QString res, hehe;
    int i=1, j=1;

    master = hilf;
    master = master.mult(minusOne);
    master.shift(j);

    while(clara.larger(j)){
        j++;
        if (clara.larger(j)){master.expand(zero);}
        else{master.expand(eins);}
    }

    while (f.degree() >= (2*i)){
        g = rgcd(f,master);

        if (g.degree()> 0){
            hehe = g.CanZas(i,d);
            res.append(hehe);
        }
        f = f/g;
        i++;

        clara = chara*clara;

        j= 1;
        master = hilf;
        master = master.mult(minusOne);
        master.shift(j);

        while(clara.larger(j)){
            j++;
            if (clara.larger(j)){master.expand(zero);}
            else{master.expand(eins);}
        }
        f.normalize();
    }

    if (f.degree()>0){
        hehe = f.CanZas(f.degree(),d);
        res.append(hehe);
    }
    return res;
}
int main() {
        
     overflow();
     minusOne();
     shiftOne();
     one();
     shiftSize();

    // 64bit only
    if (sizeof(long) == 8) {
        printf("64bit\n");

        ul = -2;
        ull = -1;
        assert(0 < ul);
        assert(ul < ull);
    }
    return (0);
}