Всем привет, надо разложить число на множители(определенные). С маленькими числами все работает. Как пытаюсь работать с большими не получается. Код такой:
#include <iostream>
#include <vector>
#include <random>
using namespace std;
__int64 powmod(__int64 a, __int64 b, __int64 m) {
unsigned __int64 res = 1;
while (b > 0)
if (b & 1) {
res = (res * a) % m;
--b;
}
else {
a = (a * a) % m;
b >>= 1;
}
return res % m;
}
void algorithm(__int64 a, __int64 b, __int64 p)
{
random_device rd;
mt19937 gen(rd());
uniform_int_distribution <unsigned long long> dis(1, p);
__int64 n = 11;
vector<__int64> vector1(n);
__int64 **mas = new __int64 *[n];
__int64 r = 0;
__int64 e = n - 1;
__int64 s = 1;
vector1[0] = 2;
vector1[1] = 3;
vector1[2] = 5;
vector1[3] = 7;
vector1[4] = 11;
vector1[5] = 13;
vector1[6] = 17;
vector1[7] = 19;
vector1[8] = 23;
vector1[9] = 29;
vector1[10] = 31;
for (__int64 i = 0; i < n; i++)
mas[i] = new __int64[n];
for (__int64 i = 0; i < n; i++)
for (__int64 j = 0; j < n; j++)
mas[i][j] = 0;
//выбор элемента, который еще не встречался
for (__int64 i = 0; i < n; i++)
{
do
{
s = dis(gen);
//возведение в степень и разложение числа
r = powmod(a, s, p);
while (e != -1)
{
if (r%vector1[e] == 0)
{
r /= vector1[e];
mas[i][e]++;
}
else
e--;
}
if(r!=1)
i--;
e = n-1;
} while (r != 1);
}
}
void main()
{
algorithm(5, 43, 1073676287);
}
Значение s меняется рандомно, если не разложилось, то меняем значение s и снова пробуем разложить, здесь это не указано. Само разложение идет в цикле while. Если взять модуль 503, то все отлично работает. Если больше, то он не может. В чем проблема?
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Оценки, полученные спортсменом в соревнованиях по фигурному катанию (в баллах), хранятся в массиве из 18 элементовВ первых шести элементах...
Сделал свой первый небольшой, но интересный проект, генератор карт в консолиГенератор генерирует комнаты и коридоры, которые соединяют эти...
Помогите, пожалуйста, распарсить сообщениеПробовал через Node и NodeList, но код слишком получался объемным и трудночитаемым