add is_prime
This commit is contained in:
@@ -1,9 +1,9 @@
|
||||
Рабочий проект по изучению и анализу всяких там умных и не очень алгоритмов.
|
||||
Рабочий проект по изучению и анализу разнообразных алгоритмов.
|
||||
|
||||
Итого:
|
||||
|
||||
1. Сортировка вставками
|
||||
2. Нахождение наибольшего общего делителя
|
||||
1. Сортировка вставками.
|
||||
2. Нахождение наибольшего общего делителя.
|
||||
3. Нахождение все простых множителей заданного числа. (в работе)
|
||||
4. Сортировка слиянием. (в работе)
|
||||
5. Возведение в степень. (в работе)
|
||||
5. Возведение в степень.
|
||||
|
||||
@@ -7,13 +7,18 @@
|
||||
#include "numbers/gcd.hpp"
|
||||
#include "numbers/prime_factors.hpp"
|
||||
#include "numbers/pow.hpp"
|
||||
#include "numbers/is_prime.hpp"
|
||||
|
||||
auto main() -> int
|
||||
{
|
||||
{
|
||||
hack::log()(alg::pow(3.0, 2), alg::pow(3.0, 3));
|
||||
hack::log()(alg::is_prime(2));
|
||||
return 1;
|
||||
}
|
||||
|
||||
{
|
||||
hack::log()(alg::pow(3.0, 2), alg::pow(3.0, 3));
|
||||
}
|
||||
|
||||
{
|
||||
std::vector<int> v { 5, 4, 1, 5, 6 };
|
||||
|
||||
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