Всем привет! Хотел спросить как можно сделать предпосчет всех чисел, которые имеют 2 простых делителя без применения bruteforce ? Пожалуйста помогите мне с этим !
№ | Пользователь | Рейтинг |
---|---|---|
1 | tourist | 3690 |
2 | jiangly | 3647 |
3 | Benq | 3581 |
4 | orzdevinwang | 3570 |
5 | Geothermal | 3569 |
5 | cnnfls_csy | 3569 |
7 | Radewoosh | 3509 |
8 | ecnerwala | 3486 |
9 | jqdai0815 | 3474 |
10 | gyh20 | 3447 |
Страны | Города | Организации | Всё → |
№ | Пользователь | Вклад |
---|---|---|
1 | maomao90 | 174 |
2 | awoo | 164 |
3 | adamant | 163 |
4 | TheScrasse | 159 |
5 | nor | 157 |
6 | maroonrk | 155 |
7 | -is-this-fft- | 152 |
8 | Petr | 146 |
8 | orz | 146 |
10 | BledDest | 145 |
Всем привет! Хотел спросить как можно сделать предпосчет всех чисел, которые имеют 2 простых делителя без применения bruteforce ? Пожалуйста помогите мне с этим !
Название |
---|
У знаю как за N2 (где N — количество простых делителей до определенного M)
Перебираем первый делитель ( пускай это будет x), перебираем второй делитель ( пускай это будет y), в какой-нибудь массив добавляем x * y.
p.s скорее всего быстрее будет за
Не плохой алгоритм ,намного лучше чем я хотел. Но было бы очень хорошо если можно было бы это сделать лучше N^2 .Всё равно спасибо Dalgerok ! Я попробую написать.
Количество простых чисел до M приблизительно равно .
Значит мой алгоритм приблизительно сделает операций.
Только что проверил, мой алгоритм на числах M >= 5504 делает в среднем больше операций, чем обычный bruteforce за .
Видимо функция в первом случае растет быстрее, чем во втором.
Можно решетом Эратосфена найти все такие числа, меньшие n, за .
А разве решето Эратосфена ,не для нахождения простых чисел qoo2p5 ? Просто как сделать с Эратосфена ,я не знаю.
Когда находишь простое число p, рассматривай числа p, 2p, 3p, ... и к их счётчику количества простых делителей прибавляй 1.
Разве это не O(nlogn)?
Доказательство оценки тут.
Но ведь там рассматриваются числа p^2,p^2+p...
Это не правда. В обоих случаях будет .
Я ведь специально отправил ссылку на статью с доказательством.
Также можно проверить экспериментально. Для n = 109 получается примерно 3.2n просмотров чисел.
UPD. Изначально отвечал на другой комментарий, который был удалён.
Напишем линейное решето (находящее для каждого числа минимальное простое), после этого все такие подобные вещи тоже делаются за O(N) проходом слева направо (и возможно запомнианием какой-то ДП)
Ну через решето Эратосфена найти простые числа , а потом как можно в массив занести меньше за O(n^2) riadwaw ?
тут вопрос, что значит "два простых"? Если это значит число вида pq (или p^2), то
Если подразумевается, кол-во различных простых, то при n >= 2
cnt_different[n] = cnt_dirrerent[n / lp[n]] + (lp[n] != lp[n / lp[n]] ? 1 : 0);
Ну вы верно поняли riadwaw . То есть у этих чисел должно быть ровно два простых делителя.
так я два варианта понимания привёл :)
Хм, я подумал ему необходимы именно сами числа, а не их количество.