diff --git a/README.md b/README.md new file mode 100644 index 0000000..7ddc088 --- /dev/null +++ b/README.md @@ -0,0 +1,73 @@ +# Алгоритмы решения прикладных задач, 1-й семестр, 2-я практика + +## Задания + +### Задание 1 + +Написать программу для поиска наибольшего общего делителя (числа вводятся с клавиатуры после запуска программы): +Нечетные варианты: наибольший делитель трех чисел методом деления (для поиска остатка отделения в языке C++ используется операция %) +Четные варианты: наибольший общий делитель четырех чисел метолом вычитания + +```cpp +// Функция для нахождения НОД двух чисел (метод деления) +int gcdDivision(int a, int b) { + while (b != 0) { + int temp = b; + b = a % b; + a = temp; + } + return a; +} + +// Функция для нахождения НОД трех чисел +int gcdOfThreeNumbers(int x, int y, int z) { + return gcdDivision(gcdDivision(x, y), z); +} + +// Функция для нахождения НОД двух чисел методом вычитания +int gcdSubtraction(int a, int b) { + while (a != b) { + if (a > b) { + a -= b; + } else { + b -= a; + } + } + return a; // или b, так как a == b +} + +// Функция для нахождения НОД четырех чисел +int gcdOfFourNumbers(int w, int x, int y, int z) { + return gcdSubtraction(gcdSubtraction(gcdSubtraction(w, x), y), z); +} +``` + +### Задание 2 + +Написать программу для факторизации заданного с клавиатуры числа методом простого перебора (указать простые множители и их кратность). Для анализа числа на простоту использовать решето Эратосфена + +```cpp +#include +#include + +#include "sieveoferatosthenes.cpp" + +// Функция для факторизации числа (метод простого перебора) +std::map factorize(int number) { + std::map factors; + std::vector primes = sieveOfEratosthenes(number); + + for (int prime : primes) { + if (prime * prime > number) break; + while (number % prime == 0) { + factors[prime]++; + number /= prime; + } + } + if (number > 1) { + factors[number]++; + } + + return factors; +} +```