diff --git a/README.md b/README.md index 991f94b..d49cbf4 100644 --- a/README.md +++ b/README.md @@ -85,34 +85,34 @@ std::map factorize(int number) { #include "sieveoferatosthenes.cpp" -// Функция для факторизации числа методом Ферма -std::map fermatFactorize(int number) { +std::map fermatFactorize(int n) { std::map factors; // Проверка на простоту - std::vector primes = sieveOfEratosthenes(static_cast(sqrt(number)) + 1); + std::vector 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(ceil(sqrt(number))); - int b2 = a * a - number; - int b = static_cast(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(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]++; diff --git a/task3.cpp b/task3.cpp index e6223d5..eb43127 100644 --- a/task3.cpp +++ b/task3.cpp @@ -12,34 +12,34 @@ #include "sieveoferatosthenes.cpp" -// Функция для факторизации числа методом Ферма -std::map fermatFactorize(int number) { +std::map fermatFactorize(int n) { std::map factors; // Проверка на простоту - std::vector primes = sieveOfEratosthenes(static_cast(sqrt(number)) + 1); + std::vector 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(ceil(sqrt(number))); - int b2 = a * a - number; - int b = static_cast(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(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]++; diff --git a/task6.cpp b/task6.cpp index fe2131a..22ac4be 100644 --- a/task6.cpp +++ b/task6.cpp @@ -7,7 +7,7 @@ void Sundaram(bool A[], int N) i = 1; j = 1; while ((2 * i * j + i + j) <= N) { - while (j <= (N - i) / (2 * i + 1)) + while ( (N - i) / (2 * i + 1) >= j ) { A[2 * i * j + i + j] = false; j++;