Beispiel #1
0
//no even number in the table
void factor_using_table_odd(i64 n, IntPairVec& vpairs, const vector<int>& ftable)
{
    vpairs.clear(); 
    i64 n2 = 0;
    while( (n & 1) == 0){
        n >>= 1;
        ++n2;
    }
    if(n2)
        vpairs.push_back(IntPair(2, n2));

    assert( (n & 1) > 0);
    int np = (n-1) >> 1;
    int pwr = 0;
    int curr_fac = ftable[np];
    while(curr_fac>1){
        ++pwr;
        n /= curr_fac;
        np = (n-1) >> 1;
        while(curr_fac == ftable[np]){
            ++pwr;
            n /= ftable[np];
            np = (n-1) >> 1;
        }
        vpairs.push_back(IntPair(curr_fac, pwr));
        curr_fac = ftable[np];
        pwr = 0;
    }
}
Beispiel #2
0
//the factors are from small to large
//first is prime number, second is power
void factor_using_table(i64 n, IntPairVec& vpairs, const vector<int>& ftable)
{
    vpairs.clear(); 
    int pwr = 0;
    int curr_fac = ftable[n];
    while(curr_fac>1){
        ++pwr;
        n /= ftable[n];
        while(curr_fac == ftable[n]){
            ++pwr;
            n /= ftable[n];
        }
        vpairs.push_back(IntPair(curr_fac, pwr));
        curr_fac = ftable[n];
        pwr = 0;
    }
}