Я пытаюсь создать эффективную функцию для генерации вектора всех powerful numbers до некоторого bound
(в конечном итоге я хотел бы, чтобы это ограничение было таким же высоким, как 10^17 или 10^18, что, по моему мнению, находится в пределах максимального значения 64-битное беззнаковое длинное длинное значение - 2^64 - 1).Есть ли более эффективный способ вычисления мощных чисел?
Самый эффективный метод, который я придумал, размещен ниже. Мой вопрос только в том, есть ли у кого-то лучшее/более эффективное предложение.
Когда эта функция выполнена, у меня есть вектор простых чисел с той же границей; Я рассматривал использование этого вектора при вычислении мощных чисел, но в момент написания я думал, что показанное решение будет более эффективным.
std::vector<int> powerful(int bound){
int x,y,cnt,num;
std::vector<int>* pows = new std::vector<ull>;
for(int i = 4; i<bound;i++){
x = i;
y=3;
cnt = 0;
num = x;
while(x%2==0){
x/=2;
cnt++;
}
while ((y <= x) && (cnt != 1)) {
cnt = 0;
while (x % y == 0) {
x /= y;
cnt++;
}
y += 2;
}
if(cnt>1)
pows->push_back(num);
}
return *pows;
}
Этот вопрос должен, вероятно, пойти на просмотр кода вместо переполнения стека. – Hawkings
@ Хокинга Я не думаю, что они не хотят, чтобы их код рассматривался, но нуждался в более лучшем имплантации. – NathanOliver
Что вы подразумеваете под «более эффективным»? Использовать меньше памяти? Быстрее? Использовать меньше CPU? –