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

View File

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

View File

@@ -7,7 +7,7 @@ void Sundaram(bool A[], int N)
i = 1; j = 1; i = 1; j = 1;
while ((2 * i * j + i + j) <= N) 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; A[2 * i * j + i + j] = false;
j++; j++;