add is_prime
This commit is contained in:
@@ -1,9 +1,9 @@
|
|||||||
Рабочий проект по изучению и анализу всяких там умных и не очень алгоритмов.
|
Рабочий проект по изучению и анализу разнообразных алгоритмов.
|
||||||
|
|
||||||
Итого:
|
Итого:
|
||||||
|
|
||||||
1. Сортировка вставками
|
1. Сортировка вставками.
|
||||||
2. Нахождение наибольшего общего делителя
|
2. Нахождение наибольшего общего делителя.
|
||||||
3. Нахождение все простых множителей заданного числа. (в работе)
|
3. Нахождение все простых множителей заданного числа. (в работе)
|
||||||
4. Сортировка слиянием. (в работе)
|
4. Сортировка слиянием. (в работе)
|
||||||
5. Возведение в степень. (в работе)
|
5. Возведение в степень.
|
||||||
|
|||||||
@@ -7,14 +7,19 @@
|
|||||||
#include "numbers/gcd.hpp"
|
#include "numbers/gcd.hpp"
|
||||||
#include "numbers/prime_factors.hpp"
|
#include "numbers/prime_factors.hpp"
|
||||||
#include "numbers/pow.hpp"
|
#include "numbers/pow.hpp"
|
||||||
|
#include "numbers/is_prime.hpp"
|
||||||
|
|
||||||
auto main() -> int
|
auto main() -> int
|
||||||
{
|
{
|
||||||
{
|
{
|
||||||
hack::log()(alg::pow(3.0, 2), alg::pow(3.0, 3));
|
hack::log()(alg::is_prime(2));
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
hack::log()(alg::pow(3.0, 2), alg::pow(3.0, 3));
|
||||||
|
}
|
||||||
|
|
||||||
{
|
{
|
||||||
std::vector<int> v { 5, 4, 1, 5, 6 };
|
std::vector<int> v { 5, 4, 1, 5, 6 };
|
||||||
alg::insertion_sort(v);
|
alg::insertion_sort(v);
|
||||||
|
|||||||
21
src/numbers/is_prime.hpp
Normal file
21
src/numbers/is_prime.hpp
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "gcd.hpp"
|
||||||
|
#include "pow.hpp"
|
||||||
|
|
||||||
|
// Малая теорема Ферма: Если p - число простое и a - целое число, не делящееся на p, то при
|
||||||
|
// возведении a в степень p - 1, наибольший общий делитель между результатом и p будет равен 1
|
||||||
|
// Но там есть ньюансы, называются обманщиками Ферма. По этому тесты нужно проводить на нескольких числах a.
|
||||||
|
// По этому если тестов много (у нас по уолчанию 1000) то вероятность того что появятся обманщики Ферам 1/2^1000
|
||||||
|
// Проверяет число на простоту
|
||||||
|
namespace alg
|
||||||
|
{
|
||||||
|
inline bool is_prime(int a, int max_test = 1000)
|
||||||
|
{
|
||||||
|
// начинаем с 4 т.к. 2 и 3 простые числа
|
||||||
|
for (int i = 4; i < max_test; ++i)
|
||||||
|
if (gcd(pow(i, a - 1), a) == 1) return true;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
Reference in New Issue
Block a user