Сап, б. Решаю задачки по программированию и вот что-то не могу допереть: Есть два целых числа, которые уменьшаются на единицу одновременно, пока одно из них не станет равным нулю, нужно посчитать сколько раз будет такое, что одно из чисел будет делиться нацело на другое число. Время выполнения сильно важно, ибо при любых входных данных программа должна выполняться менее, чем за 1 секунду. Числа могут быть 1 <= x <= 10^9
>>230745831 Я ошибся, тебе не начала школьной программы нужны, а лоботомия. Тебе это никак уже не поможет, но хотя бы буянить и срать говнотредами перестанешь.
>>230745508 (OP) Ну и в чем проблема? В первой итерации цикла проверяешь, какое число больше, его потом целочисленно делишь на другое, если получается 0, то счётчик +1. Если оба числа равны, то счётчик можно сразу ставить равным им, ибо число на само себя всегда нацело делится. > должна выполняться менее чем за 1 секунду > 10^9 Если оба числа будут хотя бы близки к этому самому миллиарду, то за секунду это тебе даже суперкудахтер не посчитает
>>230745992 Мне интересно нахуй вы пишите это? Ты ж блять вряд ли студент даже, ты вообще в теме не шаришь. Но зачем-то приходишь в унылый тред с лабами и строчишь этот бесполезный пост. Зачем?
>>230746091 Что должно мне похую. У тебя скажем есть n=10 как ты меньше чем за 10 итераций получишь из него 0? Только если сразу сделаешь 10 - 10, но в условии сказано, что именно по единице отнимается
>>230746042 Ну без цикла тут никак не обойдёшься. Можно попробовать параллельное погромирование, если у тебя цопэ многоядерный что в 2к20 наверняка так. Гугли OpenMP или MPI, но это на крестах, на питоне хз есть ли аналоги. И опять же сомневаюсь что даже так удастся уложиться в секунду, ибо диапазон значений слишком большой. Вот если бы хотя бы одно из чисел было бы хотя бы до 100 миллионов, то думаю за секунду затащилось
>>230746284 Пиздец ты еблан, ты ж просто нулевой. А по теме, нахуй писать на мпи в питоне в циклической задаче? Ну хотя че я хочу, ты ж в теме не разбираешься.
>>230746299 >>230746318 >которые уменьшаются на единицу одновременно, пока одно из них не станет равным нулю которые уменьшаются на единицу одновременно НА ЕДИНИЦУ
Если ты пропустишь итерацию, то по итогу у тебя число будет 1, пропустишь две итерации, будет 2 и т.д.
>>230745508 (OP) Ну смотри Есть x,y Есть переменная N, считающая РАЗЫ Есть цикл, уменьшающий x,y на 1 Тебе нужно: До цикла определить, что на что делить. Можно задать новые переменные, например - "If x>y: x,y = max,min Else: x,y = min,max" Дальше при каждой итерации производить операцию "If max%min ==0: N+=1" Ну и не забыть про ситуацию, когда x=y. Мимо давно не прогер.
const calculate = (a, b) => { let newA = a; let newB = b; let result = 0; while (true) { if (newA === 0 || newB === 0) { return result; } if (a % b === 0 || b % a === 0) { result++; } newA--; newB--; } };
>>230746479 >Мимо давно не прогер. Ну мы видим. А в унылый тред со своим дебильным решением прибежал. Тут же за 30 постов до тебя никто не догадался до такого, слава богу ты пришел, рачина.
>>230746527 Прочитай внимательно еще раз ОП-хуй-пост. Там ничего не сказано о том, что только в каждой ИТЕРАЦИИ должна вычитаться единица. Там сказано только то, что они уменьшаются одновременно
>>230745508 (OP) Даю наводку: разность этих 2 чисел - константа. А дальше стоит поработать мозгом, а если не выходит, то идти учить арифметику основы теории чисел и делимости
>>230746886 Ты себя не успокаивай, задача на примитивнейшую матешу, я, например, в работе использую вышмат куда серьезнее, так что пока не выучишь нормально математику, на работу тебя не возьмут.
>>230746997 Ты троль, никто не знает такую математику, даже загуглить не смог причем тут разность константа и какое это ваще отношение имеет к делимости чисел друг на друга.
>>230747151 >Ты троль, никто не знает такую математику, даже загуглить не смог причем тут разность константа и какое это ваще отношение имеет к делимости чисел друг на друга.
>>230746975 > на примитивнейшую матешу Именно поэтому ты только визжишь с сагой и брызжишь ядом на весь тред, вместо того чтобы рассказать, как же эта примитивнейшая задача решается?
>>230745508 (OP) >два целых числа Примем наименьшее как a, большее - как b. d = b-a. Тогда имеем два ряда A = (0..a) и B = A+d. Тогда очевидно, что чтобы член из ряда A был частным от соотв. ряда B - член из B должен быть больше или равен чем соотв. член А. Поэтому если ты и собрался проверять циклом то проверять имеет смысл только в A=(0..MIN(a,d)). Когда текущее число из ряда A > d то условие целочисленного деления (Ax+d)/Ax никогда не будет выполняться.
>>230747250 >и собрался проверять циклом то проверять имеет смысл только в A=(0..MIN(a,d)). А теперь давай подумаем, пройдя по этому циклу и уменьшая числа по единице, одно из них станет нулём?))))))))))
>>230747388 >пройдя по этому циклу и уменьшая числа по единице, одно из них станет нулём?)))))))))) Скобкодаун, хули ты там уменьшать собрался свои циклом, ммм? Я тебе расписал два связанных числовых ряда а ты дауненок все никак уменьшать по единице не перестанешь.
Давайте проясним раз и навсегда. ЕСЛИ надо уменьшать числа по единице одновременно, пока одно из них не станет нулём, то решение только одно и оно O(n) ЕСЛИ это не нужно делать, тогда O(1).
>>230747785 >очевидно число не будет нулём Какое, блядь, число не будет нулем? Ты сейчас придрался что в условии числа >=1 а у меня ряды с нуля начинаются? Ну хуй с тобой, пусть с 1 начинаются, это ничего не меняет.
>>230747934 Прямо сейчас созвонился с коучем, он дал выход на мамку ОПа. Сейчас еду на тимбилдинг с ней в антикафе. Посоветуйте годный саундтрек под этот кейс
>>230747785 Ты долбоеб. У тебя задача найти количество таких пар, хуйня про итерации дана для наглядности потому что про ряды ты нихуя не знаешь. Итерации твои мудацкие не касаются решения, максимум пользы от них это промоделировать на листочке и найти закономерности, зависящие от разности чисел как тебе уже написали
>>230745508 (OP) Если числа слишком большие, скажем, больше ляма каждое, то перед циклом делишь их на 1000, только потом считаешь счётчиком. В конце счётчик умираешь на тысячу, вот тебе и ответ. /thread
>>230748523 >Если числа слишком большие, скажем, больше ляма каждое, то перед циклом делишь их на 1000, только потом считаешь счётчиком. В конце счётчик умираешь на тысячу, вот тебе и ответ. >/thread
>>230747217 Да, именно поэтому. Ты, видимо, в силу своей тупости, не понимаешь чего я хочу и мои мотивы. Я хочу: интересные треды с умными людьми Я не хочу: неинтересные треды с лабами, которые создал идиот Поэтому я всячески саботирую все, что мне нравится.
>>230748892 >>230747217 Да, именно поэтому пидораха крым Ты, видимо, в силу своей тупости пыня хуйло, не понимаешь чего я хочу и мои Крым Навальный мотивы. Я хочу: интересные Крым Навальный Донбасс пидорашки треды с умными людьми Я не хочу: Пыня хуйло +15 неинтересные треды с лабами, которые создал идиот Поэтому я всячески саботирую все, что мне нравится.
>>230745508 (OP) Сап, б. Решаю задачки по Пыня Донбасс хохлы и вот что-то не могу допереть: Есть два Навальный числа, которые уменьшаются на единицу одновременно Крым, пока одно из них не станет равным нулю Донбасс, нужно посчитать сколько раз будет такое, что одно из чисел будет делиться нацело на другое число. Время выполнения сильно пидораха, ибо при любых входных данных долбильня лахты должна выполняться менее, чем за 1 секунду. Числа могут быть +15
>>230749204 > Сап, б. Решаю задачки по Пыня Донбасс хохлы и вот что-то не могу допереть: > Есть два Навальный числа, которые уменьшаются на единицу одновременно Крым, пока одно из них не станет равным нулю Донбасс, нужно посчитать сколько раз будет такое, что одно из чисел будет делиться нацело на другое число. > Время выполнения сильно пидораха, ибо при любых входных данных долбильня лахты должна выполняться менее, чем за 1 секунду. > Числа могут быть +15
>>230749026 > Да, именно поэтому пидораха крым > Ты, видимо, в силу своей тупости пыня хуйло, не понимаешь чего я хочу и мои Крым Навальный мотивы. > Я хочу: интересные Крым Навальный Донбасс пидорашки треды с умными людьми > Я не хочу: Пыня хуйло +15 неинтересные треды с лабами, которые создал идиот > Поэтому я всячески саботирую все, что мне нравится.
>>230747900 > Давайте проясним раз и навсегда. > ЕСЛИ надо уменьшать числа по единице одновременно, пока одно из них не станет нулём, то решение только одно и оно O(n) > ЕСЛИ это не нужно делать, тогда O(1).
>>230746479 > Ну смотри > Есть x,y > Есть переменная N, считающая РАЗЫ > Есть цикл, уменьшающий x,y на 1 > Тебе нужно: > До цикла определить, что на что делить. Можно задать новые переменные, например - "If x>y: x,y = max,min Else: x,y = min,max" > Дальше при каждой итерации производить операцию "If max%min ==0: N+=1" > Ну и не забыть про ситуацию, когда x=y. > Мимо давно не прогер.
>>230746400 > Пиздец ты еблан, ты ж просто нулевой. > А по теме, нахуй писать на мпи в питоне в циклической задаче? Ну хотя че я хочу, ты ж в теме не разбираешься.
>>230746746 > Даю наводку: разность этих 2 чисел - константа. А дальше стоит поработать мозгом, а если не выходит, то идти учить арифметику основы теории чисел и делимости
>>230746445 > >которые уменьшаются на единицу одновременно, пока одно из них не станет равным нулю > которые уменьшаются на единицу одновременно > НА ЕДИНИЦУ
> Если ты пропустишь итерацию, то по итогу у тебя число будет 1, пропустишь две итерации, будет 2 и т.д.
Мне кажется ОП просто придумал нерешаемую задачку и троллит двач, ибо за 125 постов ни одного решения, хотя по слухам на дваче много 300кк/нанонек погромистов
>>230745992 > Ну и в чем проблема? В первой итерации цикла проверяешь, какое число больше, его потом целочисленно делишь на другое, если получается 0, то счётчик +1. Если оба числа равны, то счётчик можно сразу ставить равным им, ибо число на само себя всегда нацело делится. > > должна выполняться менее чем за 1 секунду > > 10^9 > Если оба числа будут хотя бы близки к этому самому миллиарду, то за секунду это тебе даже суперкудахтер не посчитает
>>230749562 > Мне кажется ОП просто придумал нерешаемую задачку и троллит двач, ибо за 125 постов ни одного решения, хотя по слухам на дваче много 300кк/нанонек погромистов
Полон тред жира. Вот тебе ответ ОП, я сегодня добрый. Пусть минимальное число - a. Тогда большее число a + c (c - константа). Тогда условие задачи записывается как ak = a + c (k - какое то целое число), таким образом a(k-1) = c и a = c/(k-1). Тебе нужно c разложить на простые множители и в итоге число уникальных простых множителей будет ответом.
>>230747250 > >два целых числа > Примем наименьшее как a, большее - как b. d = b-a. > Тогда имеем два ряда A = (0..a) и B = A+d. > Тогда очевидно, что чтобы член из ряда A был частным от соотв. ряда B - член из B должен быть больше или равен чем соотв. член А. Поэтому если ты и собрался проверять циклом то проверять имеет смысл только в A=(0..MIN(a,d)). Когда текущее число из ряда A > d то условие целочисленного деления (Ax+d)/Ax никогда не будет выполняться.
>>230749493 Ну ты гений Если у тебя будет на вход массив из N элементов, то при том, что цикл выполняется, например, 100 раз, то это будет O(1), т.е. входные данные не влияют на время выполнения. Если будешь проходить в цикле по каждому элементу массива (т.е. будет N итераций), то сложность будет O(n) Если совсем примитивно объяснять
>>230745508 (OP) >>230747250 >Примем наименьшее как a, большее - как b. d = b-a. >Тогда имеем два ряда A = (0..a) и B = A+d. Тогда суть задачи сводится к следующему - сколько в ряду А чисел таких, которые при делении d на An дадут частное без остатка. Тогда если это частное принять как x то An=d/x, а Bn=An+d=d/x+d а условие деления без остатка всегда будет выполняться - Bn/An = (d/x+d)/(d/x)=x(d/x+d)/d = d+xd/d = 1+x. Поскольку ряд начинается с единицы - что мешает просто разделить d на a и округлить вниз? Ведь каким бы не были d и a - в ряду от 1 до a будет ровно floor(d/a) чисел которые делятся ровно, разве нет?
>>230749647 > Ну ты гений > Если у тебя будет на вход массив из N элементов, то при том, что цикл выполняется, например, 100 раз, то это будет O(1), т.е. входные данные не влияют на время выполнения. > Если будешь проходить в цикле по каждому элементу массива (т.е. будет N итераций), то сложность будет O(n) > Если совсем примитивно объяснять
>>230749675 > >Примем наименьшее как a, большее - как b. d = b-a. > >Тогда имеем два ряда A = (0..a) и B = A+d. > Тогда суть задачи сводится к следующему - сколько в ряду А чисел таких, которые при делении d на An дадут частное без остатка. > Тогда если это частное принять как x то An=d/x, а Bn=An+d=d/x+d а условие деления без остатка всегда будет выполняться - Bn/An = (d/x+d)/(d/x)=x(d/x+d)/d = d+xd/d = 1+x. > Поскольку ряд начинается с единицы - что мешает просто разделить d на a и округлить вниз? Ведь каким бы не были d и a - в ряду от 1 до a будет ровно floor(d/a) чисел которые делятся ровно, разве нет?
Вот шо придумал. Как уже заметили то разница постоянна. И большее число всегда будет разница + итератор а меньшее просто итератор. Успех когда большее делится на меньшее. Вот допустим числа a b их разница b-a нужно узнать сколько раз b-a + i будет делиться на i По свойству делимости это будет делиться когда b-a делится на i. Те задача теперь звучит так: сколько делителей у числа b-a. Зная число простых делителей и количество каждого простого в разложении легко будет найти ответ. Итого нам надо найти разложение на простые множители. Простые числа на ходу считать не будем, а на считаем до выполнения основной программы и занесём в табличку. Теперь пиздохаем по табличке простых чисел и проверяем на делимость число b-a. Верхняя граница в этом цикле будет корень из b-a ибо максимум это два простых множителя одинаковых.
>>230750897 Простые числа тут не нужны. Я вот как решил: Пусть a - меньшее, b - большее; Выделяем частный случай a = b, ответ будет равен a или b; d = b - a Ответом будут являться все делители числа d, которые меньше либо равны a.
>>230750305 Количество итераций корень из d. >>230750897 Количество итераций это количество простых чисел до корня из d.
Так шо через простые числа лучше кмк, но надо делить на простое тк оно может входить в разложение несколько раз. А в первом способе шаг можно сделать не cnt++ а cnt+=2 после проверки на чётность.
>>230746318 да питонисты, похоже, все такие в одном из прошлых тредов такой же еблан рассказывал, что он и сумму арифметической прогрессии будет считать в цикле, потому что у него больше времени уйдет на то, чтобы "лезть в математику", чем на то, чтобы наебенить цикл.
>>230745508 (OP) Здесь скорее не по времени надо тестировать , а по количеству действий которое совершает алгоритм. При таких ограничениях задача должна решаться за О(1) , то есть надо придумать формулу.
>>230758466 >Это же элементарная задача, в которой нужно лишь посчитать количество делителей разницы заданных чисел Что если первое число будет 1, а второе 9_999_999_999?