Сложность времени, чтобы найти первые N чисел, делящихся только на 2, 3 и 5

66
9

Проблема. Какова сложность поиска первых N чисел, которые делятся только на 2, 3, 5?

Мое усилие

Код -

void printFirstNNumbers(int N) {

int numbersFound = 0;

// loop#1
for(int cnt = 0; ; cnt++) {
int currentNumber = cnt;

// loop#2
while(currentNumber != 1) {
if(currenNumber%2 == 0) currentNumber /= 2;
else if(currentNumber%3 == 0) currentNumber /= 3;
else if(currentNumber%5 == 0) currentNumber /= 5;
else break;
}

if(currentNumber == 1) {
cout << currentNumber;
numbersFound++;
if(numbersFound == N) return;
}
}
}

Расчет сложности -

Loop # 2 complex - O (ln (i)), это происходит, когда каждый раз число делится на 2 и, наконец, достигает 1.

Loop # 1 сложность - O (T), где T - количество раз, когда она итерации получает первые N чисел.

Таким образом, сложность представляет собой суммирование ln (i), где я = 2 - T.

C = summation of ln(i), where i = 2 to T.

2^C = 2*3*....T = factorial(T)

C = ln( factorial(T) )

where factorial(N) = sqrt(2*pie*N)* (N/e)^N

означает, что факториал (N) прямо пропорционален (N) ^ (3N/2)

В приведенном выше уравнении,

C = ln ( (T)^(3T/2) ) = (3T/2) ln(T)

C = O(T ln(T) ).

Вопросы -

Можем ли мы представить T в терминах N? Если да, то, пожалуйста, помогите мне преобразовать это.

спросил(а) 2020-03-28T15:34:15+03:00 1 месяц, 4 недели назад
1
Решение
65

Числа, которые вы пытаетесь найти, называются 5-гладкими. Одна из границ статьи Википедии предполагает, что существует O (log ^ 3 T) 5-гладких чисел меньше T, поэтому, учитывая N, нам нужно установить T = 2 ^ Omega (N ^ (1/3)).

Если вы пытаетесь перечислить 5-гладкие числа, алгоритм Дейкстры, вероятно, подходит, возвращая N чисел в O (N) раз.

ответил(а) 2020-03-28T15:49:25.239111+03:00 1 месяц, 4 недели назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема