fork download
  1. #include <iostream>
  2. #include <vector>
  3. #include <unordered_map>
  4. #include <cmath>
  5.  
  6. using namespace std;
  7.  
  8. unordered_map<int, int> factorize(int n) {
  9. unordered_map<int, int> factors;
  10. while (n % 2 == 0) {
  11. factors[2]++;
  12. n /= 2;
  13. }
  14. for (int i = 3; i <= sqrt(n); i += 2) {
  15. while (n % i == 0) {
  16. factors[i]++;
  17. n /= i;
  18. }
  19. }
  20. if (n > 2) {
  21. factors[n]++;
  22. }
  23. return factors;
  24. }
  25.  
  26. int max_divisible_elements(vector<int>& arr, int k) {
  27. unordered_map<int, int> prime_factors_count;
  28. for (int num : arr) {
  29. unordered_map<int, int> factors = factorize(num);
  30. for (auto& factor : factors) {
  31. prime_factors_count[factor.first] += factor.second;
  32. }
  33. }
  34.  
  35. int max_divisible = 0;
  36. for (auto& factor : prime_factors_count) {
  37. max_divisible = max(max_divisible, factor.second / k);
  38. }
  39.  
  40. return max_divisible;
  41. }
  42.  
  43. int main() {
  44. vector<int> arr = {1, 2, 3, 4, 5, 6};
  45. int k = 6;
  46. cout << max_divisible_elements(arr, k) << endl; // Output: 2
  47. return 0;
  48. }
Success #stdin #stdout 0.01s 5268KB
stdin
Standard input is empty
stdout
0