fork(14) download
  1. #include <utility>
  2. #include <vector>
  3.  
  4. std::vector< std::pair<int, int> > factor_table;
  5. void fill_sieve( int n )
  6. {
  7. factor_table.resize(n+1);
  8. for( int i = 1; i <= n; ++i ) {
  9. if (i & 1)
  10. factor_table[i] = std::pair<int, int>(i, 1);
  11. else
  12. factor_table[i] = std::pair<int, int>(2, i>>1);
  13. }
  14. for( int j = 3, j2 = 9; j2 <= n; ) {
  15. if (factor_table[j].second == 1) {
  16. int i = j;
  17. int ij = j2;
  18. while (ij <= n) {
  19. factor_table[ij] = std::pair<int, int>(j, i);
  20. ++i;
  21. ij += j;
  22. }
  23. }
  24. j2 += (j + 1) << 2;
  25. j += 2;
  26. }
  27. }
  28.  
  29. std::vector<int> factor( int num )
  30. {
  31. std::vector<int> factors;
  32. factors.reserve(30);
  33. do {
  34. factors.push_back(factor_table[num].first);
  35. num = factor_table[num].second;
  36. } while (num != 1);
  37. return factors;
  38. }
  39.  
  40. const unsigned MAX = 10000000;
  41.  
  42. int main()
  43. {
  44. fill_sieve(MAX);
  45.  
  46. std::vector<int> factors;
  47. for (int k = 1; k < MAX; k++) {
  48. factor(k).swap(factors);
  49. }
  50. }
Success #stdin #stdout 2.32s 2960KB
stdin
Standard input is empty
stdout
Standard output is empty