changed data type from int to long long in task 4
This commit is contained in:
@@ -117,21 +117,22 @@ int main() {
|
|||||||
Написать программу для проверки на простоту числа Мерсенна с использование теста Люка-Лемера. С клавиатуры вводится номер числа Мерсенна
|
Написать программу для проверки на простоту числа Мерсенна с использование теста Люка-Лемера. С клавиатуры вводится номер числа Мерсенна
|
||||||
|
|
||||||
```cpp
|
```cpp
|
||||||
|
#include <iostream>
|
||||||
#include <cmath>
|
#include <cmath>
|
||||||
|
|
||||||
// Функция для проверки, является ли число простым
|
// Функция для проверки, является ли число простым
|
||||||
bool isPrime(int p) {
|
bool isPrime(long long p) {
|
||||||
if (p <= 1) return false;
|
if (p <= 1) return false;
|
||||||
if (p <= 3) return true;
|
if (p <= 3) return true;
|
||||||
if (p % 2 == 0 || p % 3 == 0) return false;
|
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;
|
if (p % i == 0 || p % (i + 2) == 0) return false;
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Тест Люка-Лемера для проверки простоты числа Мерсенна
|
// Тест Люка-Лемера для проверки простоты числа Мерсенна
|
||||||
bool lucasLehmerTest(int p) {
|
bool lucasLehmerTest(long long p) {
|
||||||
if (p == 2) return true; // M_2 = 3, простое число
|
if (p == 2) return true; // M_2 = 3, простое число
|
||||||
|
|
||||||
// Вычисляем M_p = 2^p - 1
|
// Вычисляем M_p = 2^p - 1
|
||||||
@@ -141,7 +142,7 @@ bool lucasLehmerTest(int p) {
|
|||||||
long long s = 4;
|
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
|
s = (s * s - 2) % M_p; // s = s^2 - 2
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
13
task4.cpp
13
task4.cpp
@@ -9,18 +9,18 @@
|
|||||||
#include <cmath>
|
#include <cmath>
|
||||||
|
|
||||||
// Функция для проверки, является ли число простым
|
// Функция для проверки, является ли число простым
|
||||||
bool isPrime(int p) {
|
bool isPrime(long long p) {
|
||||||
if (p <= 1) return false;
|
if (p <= 1) return false;
|
||||||
if (p <= 3) return true;
|
if (p <= 3) return true;
|
||||||
if (p % 2 == 0 || p % 3 == 0) return false;
|
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;
|
if (p % i == 0 || p % (i + 2) == 0) return false;
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Тест Люка-Лемера для проверки простоты числа Мерсенна
|
// Тест Люка-Лемера для проверки простоты числа Мерсенна
|
||||||
bool lucasLehmerTest(int p) {
|
bool lucasLehmerTest(long long p) {
|
||||||
if (p == 2) return true; // M_2 = 3, простое число
|
if (p == 2) return true; // M_2 = 3, простое число
|
||||||
|
|
||||||
// Вычисляем M_p = 2^p - 1
|
// Вычисляем M_p = 2^p - 1
|
||||||
@@ -30,7 +30,7 @@ bool lucasLehmerTest(int p) {
|
|||||||
long long s = 4;
|
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
|
s = (s * s - 2) % M_p; // s = s^2 - 2
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -39,10 +39,13 @@ bool lucasLehmerTest(int p) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
int main() {
|
int main() {
|
||||||
int p;
|
long long p;
|
||||||
std::cout << "Введите номер числа Мерсенна (простое число p): ";
|
std::cout << "Введите номер числа Мерсенна (простое число p): ";
|
||||||
std::cin >> p;
|
std::cin >> p;
|
||||||
|
|
||||||
|
p = static_cast<long long>(pow(2, p) - 1);
|
||||||
|
std::cout << "Число Мерсенна M_" << p << " = 2^" << p << " - 1 = " << p << std::endl;
|
||||||
|
|
||||||
// Проверка, является ли p простым
|
// Проверка, является ли p простым
|
||||||
if (!isPrime(p)) {
|
if (!isPrime(p)) {
|
||||||
std::cout << p << " не является простым числом." << std::endl;
|
std::cout << p << " не является простым числом." << std::endl;
|
||||||
|
|||||||
Reference in New Issue
Block a user