Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.76/41: Рейтинг темы: голосов - 41, средняя оценка - 4.76
18 / 14 / 4
Регистрация: 02.04.2017
Сообщений: 125

Подключение сторонних библиотек

15.11.2019, 00:42. Показов 9904. Ответов 39

Студворк — интернет-сервис помощи студентам
Задание: реализовать SRP-6a
Функцию хэширования нашел, осталось понять как подключить библиотеку с BigInteger ом
Кто подскажет как это делается в visual studio?
https://github.com/faheel/BigInt
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
15.11.2019, 00:42
Ответы с готовыми решениями:

Подключение сторонних библиотек
Я пишу в Visual Studio и в некоторый проектах использую SDL. У меня есть папка с библиотеками и инклудами SDL, я ее подключаю в...

Установка сторонних библиотек
Здравствуйте. Мне нужна библиотека по нейросетям. В интернете нашел вот такую библиотеку. http://www.nongnu.org/libann/doc/installing.html ...

Использование сторонних библиотек
Всем салют! Я новичок на этом форуме, а также в языке Си++. У меня возникли вопросы. Дело в том, что до Си++ я кодил на PHP, причем...

39
18 / 14 / 4
Регистрация: 02.04.2017
Сообщений: 125
15.11.2019, 18:46  [ТС]
Студворк — интернет-сервис помощи студентам
Наконец нагрузит ряженку )
0
Just Do It!
 Аватар для XLAT
4221 / 2687 / 656
Регистрация: 23.09.2014
Сообщений: 9,246
Записей в блоге: 3
15.11.2019, 18:51
с правкой
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
///---------------------------------------------------------------------------|
/// Поиск случайного большого числа.
///---------------------------------------------------------------------------:
#include "constructors/constructors.hpp"
#include "functions/conversion.hpp"
#include "functions/math.hpp"
#include "operators/binary_arithmetic.hpp"
#include "operators/io_stream.hpp"
#include "functions/random.hpp"
#include <ctime>
 
typedef BigInt ntype;
 
////////////////////////////////////////////////////////////////////////////////
struct Task_my
{
    ntype result;
    Task_my(ntype from)
    {
        for (ntype i = from; true; i += 2)
        {
            if (is_simple(i))
            {
                result = i;
                break;
            }
        }
    }
 
    bool is_simple(ntype n)
    {
        for (ntype i = 3; i < sqrt(n); i += 2)
        {
            if (n % i == 0) return false;
        }
        return true;
    }
};
 
///////////////////////////////////////////////////////////////////////////////
#define LOG2(X) ((unsigned) (8*sizeof (unsigned long long) -\
    __builtin_clzll((X)) - 1))
 
struct Task_ferma
{
    size_t nn;
    ntype result;
    Task_ferma(ntype from, size_t _nn) : nn(_nn - 1)
    {
        for (ntype i = from; true; i += 2)
        {
            if (ferma(i))
            {
                result = i;
                break;
            }
        }
    }
 
    bool ferma(ntype x)
    {
        //ntype k = LOG2(x) + 2;
        ntype k = sqrt(x);
        for (ntype i = 0; i < 100; i++)
        {
            ntype a = (big_random(nn) % (x - 2)) + 2;
            if (gcd(a, x) != 1)        return false;
            if (pows(a, x - 1, x) != 1)  return false;
        }
        return true;
    }
    ntype gcd(ntype a, ntype b)
    {
        if (b == 0) return a;
        return gcd(b, a % b);
    }
    ntype pows(ntype a, ntype b, ntype m)
    {
        if (b == 0)
            return 1;
        if (b % 2 == 0)
        {
            ntype t = pows(a, b / 2, m);
            return mul(t, t, m) % m;
        }
        return (mul(pows(a, b - 1, m), a, m)) % m;
    }
    ntype mul(ntype a, ntype b, ntype m)
    {
        if (b == 1)
            return a;
        if (b % 2 == 0)
        {
            ntype t = mul(a, b / 2, m);
            return (2 * t) % m;
        }
        return (mul(a, b - 1, m) + a) % m;
    }
};
 
 
int rrand(int range_min, int range_max)
{
    return rand() % (range_max - range_min + 1) + range_min;
}
 
std::string generator(size_t length)
{
    std::string alphabet = "0123456789";
    std::string pass(length, '*');
    pass[0] = alphabet[rrand(1, alphabet.size() - 1)];
 
    for (size_t i = 1; i < length - 1; i++)
    {
        pass[i] = alphabet[rrand(0, alphabet.size() - 1)];
    }
    pass.back() = '3';
 
    return pass;
}
 
#define PERFOMANCE_START {float start  = clock() / (float)60000;
#define PERFOMANCE_END    float finish = clock() / (float)60000;\
            std::cout << "time: " << finish - start << " minute."\
                      << std::endl;}
 
///---------------------------------------------------------------------------|
/// Старт.
///---------------------------------------------------------------------------:
int main(int argc, char** argv)
{
    srand((unsigned)time(NULL));
 
    std::string my = generator(15);
    std::cout << "start number = " << my << "\n";
    BigInt a(my);
 
    PERFOMANCE_START
        std::cout << "ferma        = ... wait ...";
    Task_ferma task(a, my.size());
    std::cout << "\rferma        = " << task.result << "     ";
    PERFOMANCE_END
 
        BigInt a1(my);
        
    PERFOMANCE_START
      std::cout << "my           = ... wait ...";
    Task_my task(a1);
    std::cout << "\rmy           = " << task.result << "     ";
    PERFOMANCE_END
 
        std::cin.get();
    return 0;
}

0
Just Do It!
 Аватар для XLAT
4221 / 2687 / 656
Регистрация: 23.09.2014
Сообщений: 9,246
Записей в блоге: 3
15.11.2019, 18:58
Цитата Сообщение от DrOffset Посмотреть сообщение
Аналог для VS: _BitScanReverse
у нас же не числа, у нас же строки

вот откуда сам этот код алг.ферма:
https://habr.com/ru/post/205318/

там док упоминает что достаточно 100 раз
эта даже лучше чем рекомендует макрос с __builtin_clzll

можно конеш брать квадратный корень, но будет долго,
и самое главное Ферма будет против!
0
18 / 14 / 4
Регистрация: 02.04.2017
Сообщений: 125
15.11.2019, 20:15  [ТС]
Какое-же у вас железо(если не секрет), если вы прогоняете тест из чисел на 15 цифр за минуту...
У меня 8 ушло(
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
13239 / 6871 / 1827
Регистрация: 18.10.2014
Сообщений: 17,416
15.11.2019, 20:23
Цитата Сообщение от XLAT Посмотреть сообщение
родной студийный компилятор сие творение не тянет.
Цитата Сообщение от XLAT Посмотреть сообщение
ну, в студии у меня тож заработает, если я clang в студию поставлю.
VS2015 и VS2017 без проблем компилируют этот код своим родным компилятором. Никакого Clang для этого не нужно. В 2015 надо только не забыть предварительно включить <iso646.h>. В 2017 это не обязательно.

Автор BigInt.hpp, однако, накосячил: использует std::to_string, но при этом забыл включить <string> в свой хедер. Включать <string> должна вызывающая единица трансляции до включения BigInt.hpp.
0
Just Do It!
 Аватар для XLAT
4221 / 2687 / 656
Регистрация: 23.09.2014
Сообщений: 9,246
Записей в блоге: 3
15.11.2019, 20:32
Цитата Сообщение от rayzor48 Посмотреть сообщение
если не секрет
в текущий момент:


rayzor48,
если вы серьёзно решили гонять арифметику больших чисел,
то вангую, что следующие ваши темы будут про <thread> CUDA, OpenMP и т.п.
0
18 / 14 / 4
Регистрация: 02.04.2017
Сообщений: 125
15.11.2019, 20:34  [ТС]
Цитата Сообщение от XLAT Посмотреть сообщение
если вы серьёзно
Пока лабы не закрою, точно буду гонять)

Чет чувствую себя ущемленно, ибо у меня ряженка должна быть мощнее целерона(
Как вы так шестро все проверили?
0
Just Do It!
 Аватар для XLAT
4221 / 2687 / 656
Регистрация: 23.09.2014
Сообщений: 9,246
Записей в блоге: 3
15.11.2019, 20:48
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
Автор BigInt.hpp, однако, накосячил
ваще я собирал энтот проект cmake'ом
и когда вывалилось куча ошибок, то первое что я сделал,
это заглянул сразу внутря BigInt.hpp(раз он бы на верху).

честно скажу, я усомнился в адекватности того кто так это дизайнил.
только наличие тестовых сырцов убеждало меня об обратном.

Цитата Сообщение от rayzor48 Посмотреть сообщение
у меня ряженка должна быть мощнее целерона
это интересная, но отдельная тема.

для меня очень важно, чтобы я свой комп ваще не слышал.
остальное на других уровнях приоритета.
0
18 / 14 / 4
Регистрация: 02.04.2017
Сообщений: 125
15.11.2019, 20:53  [ТС]
Цитата Сообщение от XLAT Посмотреть сообщение
ваще не слышал.
Это дело вкуса, хотя я свой тодже не слышу)

Мне все еще интересно, чья заслуга, столь быстрой отработки алгоритма программы? Увас она болеее, чем в 8 раз быстрее сработала при менее мощном железе
0
Just Do It!
 Аватар для XLAT
4221 / 2687 / 656
Регистрация: 23.09.2014
Сообщений: 9,246
Записей в блоге: 3
15.11.2019, 20:54
хм, вот такое окружение, ешкин кот, селерона
0
Just Do It!
 Аватар для XLAT
4221 / 2687 / 656
Регистрация: 23.09.2014
Сообщений: 9,246
Записей в блоге: 3
15.11.2019, 20:59
Цитата Сообщение от rayzor48 Посмотреть сообщение
Увас она болеее, чем в 8
ну вот когда ближе к максимально предельному в 15 разрядах, то почти, как у вас = 8 минут:
0
Just Do It!
 Аватар для XLAT
4221 / 2687 / 656
Регистрация: 23.09.2014
Сообщений: 9,246
Записей в блоге: 3
15.11.2019, 21:01
это сравнение двух алгоритмов, которое показывает,
что нужно юзать Ферма(который считает за секунды), так на всякий случай напоминаю.
0
18 / 14 / 4
Регистрация: 02.04.2017
Сообщений: 125
15.11.2019, 21:05  [ТС]
Вы не так поняли:
У меня пользовательский алгоритм уже минут 30 ищет, при условии что самое 1 число - простое
Миниатюры
Подключение сторонних библиотек  
0
18 / 14 / 4
Регистрация: 02.04.2017
Сообщений: 125
15.11.2019, 21:07  [ТС]
боюсь представить, сколько оно искалось бы будь оно 3 или 4

Добавлено через 56 секунд
Я понимаю, просто мне интересно, как все же вышло, что мой ферма раз в 10 медленнее вашего
0
Just Do It!
 Аватар для XLAT
4221 / 2687 / 656
Регистрация: 23.09.2014
Сообщений: 9,246
Записей в блоге: 3
15.11.2019, 21:55
rayzor48, нет
дело в другом.
смотрите разницу между стартовым числом и найденным.
разделите её на 2

это будет количество сделанных проверок.
чем их больше тем и время больше.

Так как числа у нас рандомные, то может так получится что рандом выдаст мне сразу простое число.
А вам потребуется 50 таких проверок.

Раз вы не показали какие у вас числа, то конкретно делать оценки просто не на чем .

Вот честный тест с константным сидом:
сразу попадаем на рандом(один проход)
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
///---------------------------------------------------------------------------|
/// Поиск случайного большого числа.
///---------------------------------------------------------------------------:
#include "constructors/constructors.hpp"
#include "functions/conversion.hpp"
#include "functions/math.hpp"
#include "operators/binary_arithmetic.hpp"
#include "operators/io_stream.hpp"
#include "functions/random.hpp"
#include <ctime>
 
typedef BigInt ntype;
 
////////////////////////////////////////////////////////////////////////////////
struct Task_my
{   ntype result;
    size_t count;
    Task_my(ntype from) : count(0)
    {   for (ntype i = from; true; i += 2)
        {
            count++;
            if (is_simple(i))
            {   result = i;
                break;
            }
        }
    }
 
    bool is_simple(ntype n)
    {   for (ntype i = 3; i < sqrt(n); i += 2)
        {   if (n % i == 0) return false;
        }
        return true;
    }
};
 
///////////////////////////////////////////////////////////////////////////////
#define LOG2(X) ((unsigned) (8*sizeof (unsigned long long) -\
    __builtin_clzll((X)) - 1))
 
struct Task_ferma
{
    size_t count;
    size_t nn;
    ntype result;
    Task_ferma(ntype from, size_t _nn) : nn(_nn/2), count(0)
    {   for (ntype i = from; true; i += 2)
        {
            count++;
            if (ferma(i))
            {
                result = i;
                break;
            }
        }
    }
 
    bool ferma(ntype x)
    {   //ntype k = LOG2(x) + 2;
        ntype k = sqrt(x);
        for (ntype i = 0; i < 100; i++)
        {   
            ntype a = (big_random(nn) % (x - 2)) + 2;
            if (gcd(a, x) != 1)        return false;
            if (pows(a, x - 1, x) != 1)  return false;
        }
        return true;
    }
 
    ntype gcd(ntype a, ntype b)
    {   if (b == 0) return a;
        return gcd(b, a % b);
    }
 
    ntype pows(ntype a, ntype b, ntype m)
    {   if (b == 0)
            return 1;
        if (b % 2 == 0)
        {   ntype t = pows(a, b / 2, m);
            return mul(t, t, m) % m;
        }
        return (mul(pows(a, b - 1, m), a, m)) % m;
    }
 
    ntype mul(ntype a, ntype b, ntype m)
    {   if (b == 1)
            return a;
        if (b % 2 == 0)
        {   ntype t = mul(a, b / 2, m);
            return (2 * t) % m;
        }
        return (mul(a, b - 1, m) + a) % m;
    }
};
 
 
int rrand(int range_min, int range_max)
{   return rand() % (range_max - range_min + 1) + range_min;
}
 
std::string generator(size_t length)
{
    std::string alphabet = "0123456789";
    std::string pass(length, '*');
    pass[0] = alphabet[rrand(1, alphabet.size() - 1)];
 
    for (size_t i = 1; i < length - 1; i++)
    {   pass[i] = alphabet[rrand(0, alphabet.size() - 1)];
    }
    pass.back() = '3';
 
    return pass;
}
 
#define PERFOMANCE_START {float start  = clock() / (float)60000;
#define PERFOMANCE_END    float finish = clock() / (float)60000;\
            std::cout << "time: " << finish - start << " minute."\
                      << std::endl;}
 
///---------------------------------------------------------------------------|
/// Старт.
///---------------------------------------------------------------------------:
int main(int argc, char** argv)
{
    //srand((unsigned)time(NULL));
 
    std::string my = generator(15);
    std::cout <<   "start number = " << my << "\n";
 
    PERFOMANCE_START
    std::cout <<   "ferma        = ... wait ...";
    Task_ferma task(my, my.size());
    std::cout << "\rferma        = " << task.result << ",  count: " 
                                     << task.count << ",  ";
    PERFOMANCE_END
 
        
    PERFOMANCE_START
    std::cout <<   "my           = ... wait ...";
    Task_my task(my);
    std::cout << "\rmy           = " << task.result << ",  count: "
                                     << task.count << ",  ";
    PERFOMANCE_END
 
        std::cin.get();
    return 0;
}

ваше рандомное число будет такое же, как и у меня: 674094882455173

с вас скриншот ваших резов.


а это мой:
0
Just Do It!
 Аватар для XLAT
4221 / 2687 / 656
Регистрация: 23.09.2014
Сообщений: 9,246
Записей в блоге: 3
15.11.2019, 22:25
ах да, стандартное забыл сказать: из дебага переключите в релиз версию!

упд:
только щас увидел ваш скриншот, чета жутко, если вы ниче не меняли.


Добавлено через 17 минут
rayzor48, мой совет:

1. Закройте студию(это я образно) и УБЕДИТЕСЬ ЧТО ВАША СИСТЕМА РАБОТАЕТ В ШТАТНОМ РЕЖИМЕ!
2. Запустите AIDA и прогоните в ней тесты.
...

дальше по результатам.
0
18 / 14 / 4
Регистрация: 02.04.2017
Сообщений: 125
15.11.2019, 22:34  [ТС]
Ну, вроде примерно так же быстро как и у вас, я и не знал что в дебаге все так медленно работает
Миниатюры
Подключение сторонних библиотек  
1
Just Do It!
 Аватар для XLAT
4221 / 2687 / 656
Регистрация: 23.09.2014
Сообщений: 9,246
Записей в блоге: 3
15.11.2019, 22:37
rayzor48,
обошлось

версия вашей рязани???
чтобы оценить адекватность резов.
0
18 / 14 / 4
Регистрация: 02.04.2017
Сообщений: 125
15.11.2019, 22:49  [ТС]
R5 1600 без разгона

Добавлено через 4 минуты
Цитата Сообщение от rayzor48 Посмотреть сообщение
R5 1600 без разгона
Если хотите, можем ради интереса посмотреть многопоточный тестер, который вы кидали выше. Если вы поможеет в нем разобраться)
(разобраться - не значит переписать весь код за меня = лодыря)))
1
Just Do It!
 Аватар для XLAT
4221 / 2687 / 656
Регистрация: 23.09.2014
Сообщений: 9,246
Записей в блоге: 3
15.11.2019, 23:04
напоследок, вот:
тут
тест не гарантирует со 100%, что выдаваемое число будет простым.

но годится для быстрого поиска кандидата и последующей проверкой на простоту с полной гарантией.

Добавлено через 1 минуту
Цитата Сообщение от rayzor48 Посмотреть сообщение
Если хотите, можем ради интереса посмотреть многопоточный тестер, который вы кидали выше. Если вы поможеет в нем разобраться)
(разобраться - не значит переписать весь код за меня = лодыря)))
если без бигнамбера, то что там разбираться, берете и пользуетесь.

мож он там и есть свой(судя по тем типам, скорее нет), я толком не смотрел

Добавлено через 4 минуты
Цитата Сообщение от rayzor48 Посмотреть сообщение
R5 1600 без разгона
R5 2400 в 2 раза быстрее чем мой селл..
по идее ваш немножко отстает.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
15.11.2019, 23:04

Графика без сторонних библиотек
Интересует следующий вопрос: можно ли без сторонних библиотек, чистым С++ вывести пиксели разных цветов или их массивы? К тому же очень...

Скрытие warning сторонних статических библиотек в g++
Здравствуйте! Я статически подключаю библиотеку (liblibrary.a), и тут компилятор gnu g++ выдает мне предупреждение на одно из мест в...

Почему включение сторонних библиотек не рекомендуется?
Почему нежелательно включать в программу под linux ну например ncurses.h (сторонняя популярная библиотека)? Почему нужно включать только...

Отключение предупреждений при подключении сторонних библиотек
Доброго времени суток! возник вопрос - чисто теоретический - допустим, что я подключил библиотеку, криво-написанную, но работающую,...

Как узнать частоту звука без сторонних библиотек
кто нибудь знает как в работать со звуком без сторонних библиотек? мне нужно чтобы во время проигрывания звука можно было узнать его...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
Книги по геймдизайну, игровым механикам и проектированию игрового опыта
8Observer8 08.11.2026
Содержание блога | English Version 1. 2003 - 06 - Designing Virtual Worlds (1st Edition) Автор: Richard A. Bartle | Объем: 768 стр. Ссылки: Amazon . . .
Родители токсичные абьюзеры по отношению к своим детям ругают их оскорбляют не любят
zorxor 08.11.2026
Жить в атмосфере постоянных оскорблений, критики и холодности со стороны родителей — это тяжелое и болезненное испытание, которое оставляет глубокие эмоциональные раны. Токсичное и абьюзивное. . .
Как только я захожу к себе в свою комнату я сразу же с себя снимаю свои трусы. Ответ от Джемени ИИ.
zorxor 08.11.2026
Джемени, как только я захожу к себе в свою комнату я сразу же с себя снимаю свои трусы. Многие люди, возвращаясь домой, сразу переодеваются в максимально свободную одежду или вовсе предпочитают. . .
Паттерн очереди действий/команд (Action / Command Queue). Система очереди действий и кат-сцен с SDL3 Callbacks, cglm и OpenGL
8Observer8 07.11.2026
Содержание блога | English Version Руководство для начинающих по реализации паттерна очереди действий/ команд (Action / Command Queue) на C++ (C++20) с использованием официального SDL3 Callbacks. . .
Проверка полного ФИО в типовом справочнике
Maks 07.11.2026
Решение реализовано в конфигурации КА2, на примере справочника "КонтактныеЛицаПартнеров". Задача: Запрет инициалов. Не допускаеть использование сокращений вида "И. И. ", "И. И. ", "И И" и. . .
Про "Windows must die!"
kumehtar 04.11.2026
Знаете, чет накатило. . . . Когда-то это было почти боевым кличем: мол, нормальный человек сидит на DOS, OS/ 2 или Linux, а вот это вот - Must Die. А теперь человек произносит «мастдай» с усмешкой - и. . .
Красочные поля с номером страницы svg+background-image
russiannick 04.11.2026
Красочные поля с номером страницы не менее важны чем в эпоху бумажных книг. Посему спешу представить почтеннейшей публике этот важный инструмент который эти поля и формирует. В процессе разработки. . .
Вступаем в новую фазу генерации favicons, векторную.
russiannick 02.11.2026
Теперь нет нужды скрывать что используется простой svg. Исходный код изображения помещаем в поле и жмем кнопку. Исходник преобразуется в вид корректный для помещения в favicon или в url(). Нажатие. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru