std::pair closest_divisor()

in src/c_interface.cpp [129:145]


std::pair<int, int> closest_divisor(int val, int div) {
  if (div == 2) {
    if ((val & 1) == 0) { return std::make_pair(2, val >> 1);  }
    else                { return std::make_pair(1, val);       }
  }
  else if (div == 4) {
    if      ((val & 3) == 0) { return std::make_pair(4, val >> 2); }
    else if ((val % 3) == 0) { return std::make_pair(3, val / 3);  }
    else if ((val % 5) == 0) { return std::make_pair(5, val / 5);  }
    else if ((val & 1) == 0) { return std::make_pair(2, val >> 1); }
    else if ((val % 7) == 0) { return std::make_pair(7, val / 7);  }
    else                     { return std::make_pair(1, val);      }
  }
  else {
    return std::make_pair(1, val);
  }
}