diff --git a/README.md b/README.md index 6f25347..d37db23 100644 --- a/README.md +++ b/README.md @@ -117,21 +117,22 @@ int main() { Написать программу для проверки на простоту числа Мерсенна с использование теста Люка-Лемера. С клавиатуры вводится номер числа Мерсенна ```cpp +#include #include // Функция для проверки, является ли число простым -bool isPrime(int p) { +bool isPrime(long long p) { if (p <= 1) return false; if (p <= 3) return true; if (p % 2 == 0 || p % 3 == 0) return false; - for (int i = 5; i * i <= p; i += 6) { + for (long long i = 5; i * i <= p; i += 6) { if (p % i == 0 || p % (i + 2) == 0) return false; } return true; } // Тест Люка-Лемера для проверки простоты числа Мерсенна -bool lucasLehmerTest(int p) { +bool lucasLehmerTest(long long p) { if (p == 2) return true; // M_2 = 3, простое число // Вычисляем M_p = 2^p - 1 @@ -141,7 +142,7 @@ bool lucasLehmerTest(int p) { long long s = 4; // Выполняем тест - for (int i = 3; i <= p; ++i) { + for (long long i = 3; i <= p; ++i) { s = (s * s - 2) % M_p; // s = s^2 - 2 } diff --git a/task4.cpp b/task4.cpp index 839e875..7f1fcf2 100644 --- a/task4.cpp +++ b/task4.cpp @@ -9,18 +9,18 @@ #include // Функция для проверки, является ли число простым -bool isPrime(int p) { +bool isPrime(long long p) { if (p <= 1) return false; if (p <= 3) return true; if (p % 2 == 0 || p % 3 == 0) return false; - for (int i = 5; i * i <= p; i += 6) { + for (long long i = 5; i * i <= p; i += 6) { if (p % i == 0 || p % (i + 2) == 0) return false; } return true; } // Тест Люка-Лемера для проверки простоты числа Мерсенна -bool lucasLehmerTest(int p) { +bool lucasLehmerTest(long long p) { if (p == 2) return true; // M_2 = 3, простое число // Вычисляем M_p = 2^p - 1 @@ -30,7 +30,7 @@ bool lucasLehmerTest(int p) { long long s = 4; // Выполняем тест - for (int i = 3; i <= p; ++i) { + for (long long i = 3; i <= p; ++i) { s = (s * s - 2) % M_p; // s = s^2 - 2 } @@ -39,10 +39,13 @@ bool lucasLehmerTest(int p) { } int main() { - int p; + long long p; std::cout << "Введите номер числа Мерсенна (простое число p): "; std::cin >> p; + p = static_cast(pow(2, p) - 1); + std::cout << "Число Мерсенна M_" << p << " = 2^" << p << " - 1 = " << p << std::endl; + // Проверка, является ли p простым if (!isPrime(p)) { std::cout << p << " не является простым числом." << std::endl;