Ребят пытаюсь подключить библиотеку boost и использовать вместе с вектором. Выглядит примерно так:
#include <boost/multiprecision/cpp_int.hpp>
using namespace std;
namespace mp = boost::multiprecision;
void Pollard(mp::cpp_int a, mp::cpp_int b, mp::cpp_int p)
{
vector<mp::cpp_int> z(p+1),u(p+1),v(p+1);
z[0] = 1;
mp::cpp_int ph=phi(p);
mp::cpp_int ak=0,ev=0,eu=0,nod,chk;
mp::cpp_int p1 = p - 1;
mp::cpp_int x = 0;
for (mp::cpp_int i=0; i < p; i++)
{
if (z[i] % 3 == 1)
{
z[i + 1] = b * z[i]%p;
u[i + 1] = u[i] % ph;
v[i + 1] = (v[i] + 1) % ph;
}
if (z[i] % 3 == 2)
{
z[i + 1] = z[i] * z[i]%p;
u[i + 1] = 2*u[i] % ph;
v[i + 1] = 2*v[i] % ph;
}
if (z[i] % 3 == 0)
{
z[i + 1] = a * z[i]%p;
u[i + 1] = (u[i]+1) % ph;
v[i + 1] = v[i] % ph;
}
if (*find(z.begin(), z.begin() + i, z[i + 1])!= *(z.begin() + i))
{
ak = distance(z.begin(),find(z.begin(), z.begin() + i, z[i + 1]));
ev = v[ak] - v[i+1];
if (ev < 0)
ev += p1;
eu = u[i+1] - u[ak];
if (eu < 0)
eu += p1;
void main()
{
}
Когда считаю ue, ev выдает ошибку у v[ak] и u[ak]:
отсутствует оператор "[]", соответствующий этим операндам
Что-то не видно, что такое ваше i, какой тип имеет.
Ну, а ak - это же переменная типа mp::cpp_int, она же в size_t неявно не приводится. А поскольку оператор [] от mp::cpp_int в векторе отсутствует, вот компилятор и ругается.
Сборка персонального компьютера от Artline: умный выбор для современных пользователей