74 lines
2.6 KiB
Markdown
74 lines
2.6 KiB
Markdown
# Алгоритмы решения прикладных задач, 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 <vector>
|
||
#include <map>
|
||
|
||
#include "sieveoferatosthenes.cpp"
|
||
|
||
// Функция для факторизации числа (метод простого перебора)
|
||
std::map<int, int> factorize(int number) {
|
||
std::map<int, int> factors;
|
||
std::vector<int> 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;
|
||
}
|
||
```
|