add gcd and prime factors
This commit is contained in:
4
.gitignore
vendored
Normal file
4
.gitignore
vendored
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
build
|
||||||
|
.cache
|
||||||
|
subprojects/*
|
||||||
|
!subprojects/*.wrap
|
||||||
1
README.md
Normal file
1
README.md
Normal file
@@ -0,0 +1 @@
|
|||||||
|
Рабочий проект по изучению и анализу всяких там умных и не очень алгоритмов.
|
||||||
19
bin/main.cpp
Normal file
19
bin/main.cpp
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
#include <hack/logger/logger.hpp>
|
||||||
|
|
||||||
|
#include "numbers/gcd.hpp"
|
||||||
|
#include "numbers/prime_factors.hpp"
|
||||||
|
|
||||||
|
auto main() -> int
|
||||||
|
{
|
||||||
|
hack::log()(algorithms::gcd(4851, 3003));
|
||||||
|
hack::log()(algorithms::gcd(64, 28));
|
||||||
|
|
||||||
|
hack::log()(algorithms::prime_factors_v1(127));
|
||||||
|
hack::log()(algorithms::prime_factors_v1(128));
|
||||||
|
hack::log()(algorithms::prime_factors_v1(130));
|
||||||
|
|
||||||
|
hack::log()(algorithms::prime_factors_v2(127));
|
||||||
|
hack::log()(algorithms::prime_factors_v2(128));
|
||||||
|
hack::log()(algorithms::prime_factors_v2(130));
|
||||||
|
}
|
||||||
|
|
||||||
8
bin/meson.build
Normal file
8
bin/meson.build
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
executable(
|
||||||
|
meson.project_name(),
|
||||||
|
'main.cpp',
|
||||||
|
dependencies : deps,
|
||||||
|
cpp_args: args,
|
||||||
|
include_directories : inc
|
||||||
|
)
|
||||||
|
|
||||||
37
meson.build
Normal file
37
meson.build
Normal file
@@ -0,0 +1,37 @@
|
|||||||
|
project(
|
||||||
|
meson.current_source_dir().split('/').get(-1),
|
||||||
|
'cpp',
|
||||||
|
version : run_command('git', 'rev-parse', '--short', 'HEAD', check: false).stdout().strip(),
|
||||||
|
default_options : [
|
||||||
|
'warning_level=1',
|
||||||
|
'optimization=3',
|
||||||
|
'cpp_std=c++20',
|
||||||
|
])
|
||||||
|
|
||||||
|
add_project_arguments (
|
||||||
|
'-Wpedantic',
|
||||||
|
'-Wno-shadow',
|
||||||
|
'-Wno-unused-but-set-variable',
|
||||||
|
'-Wno-comment',
|
||||||
|
'-Wno-unused-parameter',
|
||||||
|
'-Wno-unused-value',
|
||||||
|
'-Wno-missing-field-initializers',
|
||||||
|
'-Wno-narrowing',
|
||||||
|
'-Wno-deprecated-enum-enum-conversion',
|
||||||
|
'-Wno-volatile',
|
||||||
|
'-Wno-format-security',
|
||||||
|
'-Wno-switch',
|
||||||
|
'-Wno-ignored-attributes',
|
||||||
|
'-Wno-unused-variable',
|
||||||
|
'-Wno-deprecated-enum-enum-conversion',
|
||||||
|
language: 'cpp'
|
||||||
|
)
|
||||||
|
|
||||||
|
args = []
|
||||||
|
inc = []
|
||||||
|
deps = [
|
||||||
|
subproject('hack').get_variable('hack_dep')
|
||||||
|
]
|
||||||
|
|
||||||
|
subdir('src')
|
||||||
|
subdir('bin')
|
||||||
29
run.sh
Executable file
29
run.sh
Executable file
@@ -0,0 +1,29 @@
|
|||||||
|
#!/bin/zsh
|
||||||
|
|
||||||
|
PROJECT_NAME=$(basename $PWD)
|
||||||
|
|
||||||
|
run() {
|
||||||
|
command meson compile -C build
|
||||||
|
cd build
|
||||||
|
./bin/$PROJECT_NAME
|
||||||
|
cd ..
|
||||||
|
}
|
||||||
|
|
||||||
|
# run test [name_test]
|
||||||
|
# example: run test pattrens
|
||||||
|
if [[ "$1" == "test" ]]; then
|
||||||
|
echo ""
|
||||||
|
meson test $2 -C build
|
||||||
|
echo ""
|
||||||
|
awk '/^-------------------------------------------------------------------------------/{flag=1} /===============================================================================/{flag=0} flag' ./build/meson-logs/testlog.txt
|
||||||
|
elif [[ "$1" == "tests" ]]; then
|
||||||
|
echo ""
|
||||||
|
meson test -C build
|
||||||
|
echo ""
|
||||||
|
# awk '/^-------------------------------------------------------------------------------/{flag=1} /===============================================================================/{flag=0} flag' ./build/meson-logs/testlog.txt
|
||||||
|
elif [[ -d "build" ]]; then
|
||||||
|
run
|
||||||
|
else
|
||||||
|
command meson setup build
|
||||||
|
run
|
||||||
|
fi
|
||||||
24
src/meson.build
Normal file
24
src/meson.build
Normal file
@@ -0,0 +1,24 @@
|
|||||||
|
inc += include_directories('.')
|
||||||
|
|
||||||
|
headers = [
|
||||||
|
'numbers/gcd.hpp',
|
||||||
|
'numbers/prime_factors.hpp'
|
||||||
|
]
|
||||||
|
|
||||||
|
sources = [
|
||||||
|
]
|
||||||
|
|
||||||
|
lib = library(
|
||||||
|
meson.project_name(),
|
||||||
|
include_directories : inc,
|
||||||
|
sources: [headers, sources],
|
||||||
|
dependencies : deps,
|
||||||
|
cpp_args: args
|
||||||
|
)
|
||||||
|
|
||||||
|
dsp_sdk_dep = declare_dependency(
|
||||||
|
include_directories: inc,
|
||||||
|
link_with: lib
|
||||||
|
)
|
||||||
|
|
||||||
|
deps += dsp_sdk_dep
|
||||||
18
src/numbers/gcd.hpp
Normal file
18
src/numbers/gcd.hpp
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
#pragma once
|
||||||
|
|
||||||
|
// Называется алгоритм Евклида
|
||||||
|
// Находит наибольший общий делитель
|
||||||
|
namespace algorithms
|
||||||
|
{
|
||||||
|
inline int gcd(int a, int b)
|
||||||
|
{
|
||||||
|
while (b != 0)
|
||||||
|
{
|
||||||
|
int r = a%b;
|
||||||
|
a = b;
|
||||||
|
b = r;
|
||||||
|
}
|
||||||
|
|
||||||
|
return a;
|
||||||
|
}
|
||||||
|
}
|
||||||
59
src/numbers/prime_factors.hpp
Normal file
59
src/numbers/prime_factors.hpp
Normal file
@@ -0,0 +1,59 @@
|
|||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include <vector>
|
||||||
|
#include <math.h>
|
||||||
|
|
||||||
|
// Находит все простые множители заданного числа.
|
||||||
|
// Простое число - это число > 1, которое делится на 1 и на само себя.
|
||||||
|
namespace algorithms
|
||||||
|
{
|
||||||
|
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;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
7
subprojects/hack.wrap
Normal file
7
subprojects/hack.wrap
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
[wrap-git]
|
||||||
|
url = https://gitcast.ru/chatlanin/hack.git
|
||||||
|
revision = master
|
||||||
|
|
||||||
|
[provide]
|
||||||
|
hack = hack_dep
|
||||||
|
|
||||||
Reference in New Issue
Block a user