Simplified task3

This commit is contained in:
2024-10-26 14:37:41 +03:00
parent 7a6f79283e
commit 1ec171ab0c
3 changed files with 31 additions and 31 deletions

View File

@@ -85,34 +85,34 @@ std::map<int, int> factorize(int number) {
#include "sieveoferatosthenes.cpp"
// Функция для факторизации числа методом Ферма
std::map<int, int> fermatFactorize(int number) {
std::map<int, int> fermatFactorize(int n) {
std::map<int, int> factors;
// Проверка на простоту
std::vector<int> primes = sieveOfEratosthenes(static_cast<int>(sqrt(number)) + 1);
std::vector<int> primes = sieveOfEratosthenes(n);
for (int prime : primes) {
if (prime * prime > number) break;
while (number % prime == 0) {
if (prime == 1) continue;
if (prime * prime > n) break;
while (n % prime == 0) {
factors[prime]++;
number /= prime;
n /= prime;
}
}
// Если число больше 1, применяем метод Ферма
if (number > 1) {
int a = static_cast<int>(ceil(sqrt(number)));
int b2 = a * a - number;
int b = static_cast<int>(sqrt(b2));
if (n > 1) {
int m = (int)(ceil(sqrt(n)));
int b2 = m * m - n;
int b = (int)(sqrt(b2));
while (b * b != b2) {
a++;
b2 = a * a - number;
b = static_cast<int>(sqrt(b2));
m++;
b2 = m * m - n;
b = (int)(sqrt(b2));
}
int factor1 = a - b;
int factor2 = a + b;
int factor1 = m - b;
int factor2 = m + b;
// Добавляем найденные множители
factors[factor1]++;