Проблема с рандомизацией

206
28 марта 2018, 05:34

Пытаюсь заполнить такую табличку:

Где a и b берутся рандомно. Суть такая:нужна выбрать a и b, чтобы они полностью раскладывались на множители приведенные в таблице(первые множители должны расклыдвать число по a+bm, вторые числа, должны раскладывать N, по вторым числам в паре), где N=a^2-ab+27b^2. В последней колонке в паре смотрите только на второе число, на первое пока не обращайте внимания. В rational_factor храню первые множители. В algebraic_factor храню пары последней колонки. В pairs храню полученные пары, чтобы не повторялись. m=31 это диапазон значений. Пытаюсь это реализовать так:

do {
        //генерация a и b проверка на нод и вхождения
        do {
            ab.first = rand() % m + 1; // диапазон равен от 1 до 3 включительно
            ab.second = rand() % (2*m+1) + (-m);
            int i = 0;
            else if (find(pairs.begin(), pairs.end(), ab) == pairs.end())
            {
                a = true;
                pairs[o] = ab;
                o++;
            }
            else a = false;
            }
        } while (a == false);
        //процесс заполнения матрицы
        int summa = 0;
        int yup = 0;
        summa = ab.first + ab.second*m;
        if (summa == 0)
            yup = rational_factor.size();
        if (summa < 0)
        {
            mas[ij][0] = 1;
            summa *= -1;
        }
        while (yup != rational_factor.size())
        {
            if (summa % rational_factor[yup].second == 0)
            {
                summa /= rational_factor[yup].second;
                mas[ij][yup + 1]++;
            }
            else
                yup++;
        }
        int i = 0;
        double as = (double)-ab.first / ab.second;
        for (int j = 0; j <= 2; j++)
            N += equation[j] * pow(as, j);
        N *= pow(-ab.second, d);
        if (N == 0 || summa == 0)
            i = algebraic_factor.size();
        while (i < algebraic_factor.size() - 1)
        {
                    if ((int)N % algebraic_factor[i].second == 0)
                    {
                        N /= algebraic_factor[i].second;
                        mas[ij][yup + 1]++;
                    }
                i++;
                yup++;
        }
        if (N == 1 && summa == 1)
            ij++;
        else
        {
            N = 0;
            pairs[o].first = 0;
            pairs[o].second = 0;
            o--;
            for (int k=0;k<b;k++)
                mas[ij][k] = 0;
        }
    }while (ij != b - 2);
}

Он штук 8 быстро и правильно заполняет, а потом дальше почему-то не может

READ ALSO
как преобразовать void (*Class::)() в void (*)()

как преобразовать void (*Class::)() в void (*)()

Дело в том, что я хочу в OpenGL в функцию glutDisplayFunc передать метод класса

213
Удаление элементов стека

Удаление элементов стека

Создать проект, демонстрирующий работу со стеком, организованным на основе спискаВсе операции со стеком реализовать через функции

227