#pragma once

#include <vector>
#include <math.h>

// Находит все простые множители заданного числа.
// Простое число - это число > 1, которое делится на 1 и на само себя.
namespace alg
{
  inline std::vector<int> prime_factors_v1(int a)
  {
    std::vector<int> result;
    int i = 2;

    while (i < a)
    {
      while (a%i == 0)
      {
        result.push_back(i);
        a /= i;
      }
      ++i;
    }

    if (a > 1) result.push_back(a);

    return result;
  }

  inline std::vector<int> prime_factors_v2(int a)
  {
    std::vector<int> result;

    while(a%2 == 0)
    {
      result.push_back(2);
      a = a/2;
    }

    int i = 3;
    int max_faxtor = std::sqrt(a);

    while (i <= max_faxtor)
    {
      while (a%i == 0)
      {
        result.push_back(i);
        a /= i;
        max_faxtor = std::sqrt(a);
      }
      i += 2;
    }

    if (a > 1) result.push_back(a);

    return result;
  }

}
