Программирование

В программировании можно одну проблему решить кучей разных способов - это нормально. Не нравится через корень - придумай свой алгоритм, протестируй и если работает - значит всё гуд. На нашем уровне этого вполне достаточно.
Следующий уровень - это уже учитывать эффективность алгоритма, обычно по максимальному кол-ву операций (константа * f(n)) - Это уже важно чувакам, пишущим серьёзные алгоритмы.
Потом уже идёт уровень формального доказательства, что функция делает то, что должна - это уже нужно уметь людям, пишущим критически важный софт, ну например для автопилота самолётов, и т.д.

Так что для "прикладного" программера не так уж важно как он чё-то сделал, современное железо всё простит =)))
 
я понимаю, что сексом можно заниматься в разных позах, но вот додуматься до такого решения - это хз каким индусом надо быть... до сих пор просчитываю в уме алгоритм и нихрена понять не могу логики :blink:
 
Потому что там не "натуральные" числа ищутся, а "простые" числа
 
пардон, ступил с формулировкой. Но я и имел ввиду простые числа.
 
hike написал(а):
мля.. я никогда не стану программистом.. как из этого можно понять, что ищутся натуральные числа.. я бы как угодно проверял, но не через корень...
так понимать и не надо. чуваки реализовали один из алгоритмов, которые гуглятся по запросу "поиск простых чисел".
такие вещи уже обычно реализованы внутри различных библиотек, так что не все так страшно :)

кстати, если диапазон всего до 500, то можно это дело посчитать один раз, закинуть результат в массив и потом только забирать оттуда значения.
 
Да нам еще Евсюкова говорила, что программисттможет реализовывать формулы, не понимая их значения, но тут алгоритм явно создан для исполнения программой, а не человеком.
Я бы до 500 сам бы числа простые посчитал=) Красота алгоритма поражает..
 
kil написал(а):
так понимать и не надо. чуваки реализовали один из алгоритмов, которые гуглятся по запросу "поиск простых чисел".
такие вещи уже обычно реализованы внутри различных библиотек, так что не все так страшно :)

кстати, если диапазон всего до 500, то можно это дело посчитать один раз, закинуть результат в массив и потом только забирать оттуда значения.

Ну да, тоже самое можно сказать про "Умножение Карацубы" - один из алгоритмов умножения =)) Там за ширмой целые математические изыскания стоят, но разве нам это важно? =)) Достаточно знать, что есть алгоритмы быстрые и медленные, остальное нагуглиццо =))

Пока писал вспомнилась дипломка с её Алгоритмом Дейкстры и теорией графоф для кратчайшего пути... яж не знал тогда, что это всё ваще нафиг не нужно в прикладном кодинге  :biggrin:

Даже вспомнил сайт, где смотрел перформанс разных алгоритмов... Кстати довольно интересно поиграться, там можно стенки строить и точки передвигать: http://qiao.github.io/PathFinding.js/visual/
 
а по делу мне кто-нибудь поможет? :confused0077: Хоть жопный алгоритм, но можно же создать для моей проблемы =)
 
hike написал(а):
но тут алгоритм явно создан для исполнения программой, а не человеком.
Красота алгоритма поражает..

я не хочу оскорблять твое чувство прекрастного  Хайк :hacker:, но обрати внимание, что
1. sqrt($number) считается внутри внутреннего цикла.
- Вычисление корня - это ресурсоемкая операция, поэтому лучше ее вынести наверх и считать один раз на каждый $number.
- Хотя я бы делал лучше проверку с $test * $test (тогда выносить из цикла не надо). Умножение выполнится намного быстрее, чем вычисление корня. Кстати, интересно было бы потестить что быстрее :)
2. есть разные свойства чисел, которые могут сократить кол-во итераций. К примеру, если не делится на 2 или на 3, то делить на 6 уже не надо. Ну и так далее из теории чисел, лень гуглить.
Но фишка с корнем самая критическая, по моему
 
Cooper написал(а):
Достаточно знать, что есть алгоритмы быстрые и медленные, остальное нагуглиццо =))

главное сортировку тут не упоминай  :beer: :weep: казалось бы такая простая задача, а решений йобаная туча
 
Кил, вот я бы и делал делением на 2, на 3, 5..
Все твои наблюдения - это твой многолетний опыт, а этот код для меня - как достование гланд через жопу. Не понимаю, как до такого можно додуматься :dizzy:
 
Страничка "веселого" Айтишного йумора  :D

У нас на whiteboard вчера кто-то прилепил А4 листик:

in_case_of_fireirrtb.jpg
 
Хыхы, я первое и второе делаю одним действием, так что убегать буду первым. ))
 
Учитывая, что я люблю всё это делать мышкой в IntelliJ менюхах, то есть все шансы не выбежать вообще  :D
 
hike написал(а):
Кил, вот я бы и делал делением на 2, на 3, 5..
Все твои наблюдения - это твой многолетний опыт, а этот код для меня - как достование гланд через жопу. Не понимаю, как до такого можно додуматься :dizzy:
то что тебе кажется доставанем гланд через одно место, по performance как раз таки является доставанием от туда, от куда нужно.  :biggrin: единственное, что с массивом уже найденных простых чисел его еще убыстрить мона

а забабахать цикл от одного до числа или пока не поделится, как раз таки не очень Efficient.  :biggrin:
а в ручную забивать массив простыми цифрами и подавно  :biggrin:

 
Назад
Сверху