Exemplo n.º 1
0
const BigInteger BinaryDivide::Div(const BigInteger &a, const BigInteger &b){
    if(b>a) return BigInteger("0",a.GetSystem());
    if(b==a) return BigInteger("1",a.GetSystem());
    BigInteger l("1",b.GetSystem()),r=a,m;
    BigInteger one("1",b.GetSystem());
    while(l<r){
        m=(l+r+one)/2;
        if(a<m*b)
            r=m-one;
        else
            l=m;
    }

    return l;
}
Exemplo n.º 2
0
BigInteger Algorithms::gcd(BigInteger a, BigInteger b){
    //if() return a;
    BigInteger zero("0",a.GetSystem());
    while(a!=zero && b!=zero){
        std::cout<<"iteration "<<a<<" "<<b<<std::endl;
        if(a>b) a=a%b;
        else b=b%a;
    }

    return a+b;
}
Exemplo n.º 3
0
BigInteger Algorithms::sqrt(BigInteger const &a){
    BigInteger left("1",a.GetSystem()) ,right(a),middle;
    BigInteger one("1",middle.GetSystem());

    while(left<right){
        middle=(left+right+one)/2;
        if(middle*middle>a)
            right=middle-one;
        else
            left=middle;
    }
    return left;
}