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

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

15.11.2019, 00:42. Показов 9693. Ответов 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
4219 / 2680 / 656
Регистрация: 23.09.2014
Сообщений: 9,235
Записей в блоге: 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
4219 / 2680 / 656
Регистрация: 23.09.2014
Сообщений: 9,235
Записей в блоге: 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
13210 / 6843 / 1824
Регистрация: 18.10.2014
Сообщений: 17,306
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
4219 / 2680 / 656
Регистрация: 23.09.2014
Сообщений: 9,235
Записей в блоге: 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
4219 / 2680 / 656
Регистрация: 23.09.2014
Сообщений: 9,235
Записей в блоге: 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
4219 / 2680 / 656
Регистрация: 23.09.2014
Сообщений: 9,235
Записей в блоге: 3
15.11.2019, 20:54
хм, вот такое окружение, ешкин кот, селерона
0
Just Do It!
 Аватар для XLAT
4219 / 2680 / 656
Регистрация: 23.09.2014
Сообщений: 9,235
Записей в блоге: 3
15.11.2019, 20:59
Цитата Сообщение от rayzor48 Посмотреть сообщение
Увас она болеее, чем в 8
ну вот когда ближе к максимально предельному в 15 разрядах, то почти, как у вас = 8 минут:
0
Just Do It!
 Аватар для XLAT
4219 / 2680 / 656
Регистрация: 23.09.2014
Сообщений: 9,235
Записей в блоге: 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
4219 / 2680 / 656
Регистрация: 23.09.2014
Сообщений: 9,235
Записей в блоге: 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
4219 / 2680 / 656
Регистрация: 23.09.2014
Сообщений: 9,235
Записей в блоге: 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
4219 / 2680 / 656
Регистрация: 23.09.2014
Сообщений: 9,235
Записей в блоге: 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
4219 / 2680 / 656
Регистрация: 23.09.2014
Сообщений: 9,235
Записей в блоге: 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
Ответ Создать тему
Новые блоги и статьи
Море в объективе
kumehtar 06.07.2026
Хотел написать много проникновенных слов, но передумал. Оно само - говорит. Кто слышит тот слышит.
Оказывается, Unreal Engine позволяет качество на порядки выше, чем было в Lineedge
Etyuhibosecyu 05.07.2026
Жаль, конечно, что я не узнал об этом, пока Lineedge существовала, а то бы Noname2331 написал, что волки превращаются в пиксельную кашу, а я бы его попросил скачать какую-нибудь бриллиантовую или Pro. . .
Doom для терминала без стрельбы и монстров. 3D Raycasting на ascii.
dcc0 05.07.2026
Попросил нейронную сеть deepai. org написать рейкастинг 3D с библиотекой ncurses для Linux. Чтобы можно было ходить на стрелочки. Чтобы стены были отрисованы символами. Справилась. Первый вариант. . .
Установка статуса документа по условию
Maks 05.07.2026
Алгоритм из решения ниже реализован на нетиповом документе "НарядПутевка" разработанного в КА2. Задача: в табличной части "Материалы" документа при записи автоматически устанавливать статус. . .
Сезонность и суточность закисления почв
anaschu 04.07.2026
200 часов это все равно моловато. Есть ситуации, но нестандартные, когда смена происходит за 5 лет. Но обычно это 50 лет и более. Наверное, закисление почвы происходит сезонно в средней. . .
В чем ценность человеческого опыта в глобальном смысле?
kumehtar 03.07.2026
Возможно, ценность человека не в том, что он однажды достигает мудрости, а в том, что он становится носителем карты пути. Он знает не только истину, но и последовательность внутренних изменений,. . .
интеграция AnyLogic с самописным REST API и переход на Odoo
anaschu 03.07.2026
Успешная интеграция AnyLogic с самописным REST API и переход на промышленную Odoo WMS Сегодня проделал огромный путь от простой симуляции физических процессов до построения полноценной. . .
Поиск всех путей на ориентированном графе. Linux
dcc0 02.07.2026
Переработка старого кода из моей статьи. Через несколько переработок от PHP кода к C89 (надеюсь, 89). Но довольно запутанно получилось. Код для Linux. Но если убрать time и то, что с ним. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru