Exemplo n.º 1
0
QString restpolynomial::factors(unboundInt k){
    unboundInt i(1), j, nb, chara = this->charac();
    const unboundInt one(1);
    QString res, help;

    restpolynomial f(*this);
    f = f.normalize();
    if (f.degree()>0){

    restpolynomial g(chara), c(chara), w(chara), y(chara), z(chara), m(chara), n(chara), hilf(chara);
    g = f.der();

    if (g.degree()>-1){

        c = rgcd(f,g);
        w = f/c;

        while(w.degree()>0){

            y = rgcd(w,c);
            z = w/y;

            if(z.degree()>0){
              j= one;
              nb = i*k;
              help = z.EqDegFactor(nb);
              res.append(help);
            }
            i++;
            w = y;
            c = c/y;
        }

        c.normalize();
        if(c.degree()>0){
            c = c.killZero();

            help = c.factors(chara*k);
            res.append(help);
        }
        else{
            res = res.left(res.size()-2);
        }
    }
    else{
        f = f.killZero();
        help = f.factors(chara*k);
        res.append(help);
    }
    }
    else{
        res = f.print();
    }
    return res;
}
Exemplo n.º 2
0
//最大公约数
int rgcd(int v1,int v2)
{
    if(v2!=0){
        return rgcd(v2,v1%v2);
    }
    return v1;
}
Exemplo n.º 3
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;
}
Exemplo n.º 4
0
void getE(int * e, int In){
    int i;
    for(i = 2; i < In; i++){
        //判断是否互素,最大公约数为1
        if(rgcd(i, In) == 1){
            *e = i;
            return ;
        }
    }
}