restruct folders and base approach
This commit is contained in:
59
src/tmp/numbers/prime_factors.hpp
Normal file
59
src/tmp/numbers/prime_factors.hpp
Normal file
@@ -0,0 +1,59 @@
|
||||
#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;
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user