DivisorsTable::DivisorsTable(ValueTable valueTable) : QList < QPair <int, Divisors> >() { for (int i = 0; i < valueTable.size(); ++ i){ QPair <int, Divisors> xyPair; QPair <int, int> valuePair = valueTable.at(i); xyPair.first = valuePair.first; xyPair.second = Divisors (valuePair.second); this->append(xyPair); } }
int main() { std::vector<int> ans; ans = Divisors(9); std::cout << "Divisors of 9 are: "; for(std::vector<int>::iterator it = ans.begin(); it != ans.end(); it++) { std::cout << *it << ", "; } std::cout << std::endl; return 0; }
Divisors squarefree_divisors(const PrimePowers& pp, bool sorted=true) const { const uint32 size = 1u << omega(pp); auto ret = Divisors(size); ret[0] = 1; uint32 curr_size = 1; for (auto p : pp) { uint32 next_size = curr_size; for (uint32 i = 0; i < curr_size; ++i) { ret[next_size++] = ret[i] * p.p; } curr_size = next_size; } if (sorted) { std::sort(ret.begin(), ret.end()); } return ret; }
Divisors divisors(const PrimePowers& pp, bool sorted=true) const { uint32 size = tau(pp); auto ret = Divisors(size); ret[0] = 1; uint32 curr_size = 1; for (auto p : pp) { uint32 next_size = curr_size; num_t q = p.p; for (uint32 e = 1; e <= p.e; ++e) { for (uint32 i = 0; i < curr_size; ++i) { ret[next_size++] = ret[i] * q; } q *= p.p; } curr_size = next_size; } if (sorted) { std::sort(ret.begin(), ret.end()); } return ret; }