Горячее
Лучшее
Свежее
Подписки
Сообщества
Блоги
Эксперты
#Круги добра
Войти
Забыли пароль?
или продолжите с
Создать аккаунт
Я хочу получать рассылки с лучшими постами за неделю
или
Восстановление пароля
Восстановление пароля
Получить код в Telegram
Войти с Яндекс ID Войти через VK ID
Создавая аккаунт, я соглашаюсь с правилами Пикабу и даю согласие на обработку персональных данных.
ПромокодыРаботаКурсыРекламаИгрыПополнение Steam
Пикабу Игры +1000 бесплатных онлайн игр 🔮✨Волшебство, любовь… и шерсть на одежде!
Ищи улики, решай головоломки — и помни: каждый твой шаг меняет ход сюжета.

Мой Любимый Кот

Новеллы, Головоломки, Коты

Играть

Топ прошлой недели

  • SpongeGod SpongeGod 1 пост
  • Uncleyogurt007 Uncleyogurt007 9 постов
  • ZaTaS ZaTaS 3 поста
Посмотреть весь топ

Лучшие посты недели

Рассылка Пикабу: отправляем самые рейтинговые материалы за 7 дней 🔥

Нажимая кнопку «Подписаться на рассылку», я соглашаюсь с Правилами Пикабу и даю согласие на обработку персональных данных.

Спасибо, что подписались!
Пожалуйста, проверьте почту 😊

Помощь Кодекс Пикабу Команда Пикабу Моб. приложение
Правила соцсети О рекомендациях О компании
Промокоды Биг Гик Промокоды Lamoda Промокоды МВидео Промокоды Яндекс Директ Промокоды Отелло Промокоды Aroma Butik Промокоды Яндекс Путешествия Постила Футбол сегодня
0 просмотренных постов скрыто
7
user4650942
user4650942
6 дней назад
Лига математиков

На какую наибольшую степень числа 3 может делиться сумма?⁠⁠

В четвёртом туре матрегаты 2005-2006 учебного года девятиклассникам предлагалась следующая задача:

На какую наибольшую степень числа 3 может делиться сумма вида 1! + 2! + 3! + ... + n!?

Мне кажется, что на четвёртую степень. К примеру, сумма факториалов первых семи натуральных чисел равна 5913, следовательно, делится на 81, но не делится на 243.
Однако официальный ответ на задачу звучит чуточку иначе:

Ответ: на третью степень числа 3.

Вот ссылка на этот ответ: https://view.officeapps.live.com/op/view.aspx?src=https://olympiads.mccme.ru/regata/20052006/Text_9.doc&wdOrigin=BROWSELINK (задача 4.3).

Если загуглить условие нашей задачи, то легко увидеть, что тот же самый ответ фигурирует ещё в нескольких местах, например, здесь: https://earthz.ru/solves/Zadacha-po-matematike-1435 .

Мой же ответ не фигурирует пока нигде. Что с ним не так? Будьте добры, помогите разобраться. Заранее благодарю!

Математика Урок Учеба Образование Преподаватель Ошибка Задача Предметная олимпиада Регата Школа 9 класс Школьники 2005 2006 Учитель Занимательная математика Факториал Арифметика Занимательная арифметика Теория чисел Текст
5
1
user4650942
user4650942
2 месяца назад
Лига математиков

Факториальная лесенка 3-2: где ступень становится степенью?⁠⁠

Для каких натуральных n выражение (3^1-2^1)!+(3^2-2^2)!+ ... +(3^n-2^n)! является точной степенью?

Математика Образование Учеба Преподаватель Занимательная арифметика Экзамен Урок Школа Факториал Школьники Учитель Обучение Степень Предметная олимпиада Текст
5
0
user4650942
user4650942
3 месяца назад
Лига математиков

Васильковые числа⁠⁠

Назовём натуральное число васильковым, если его можно разбить на два натуральных слагаемых таким образом, чтобы произведение этих двух слагаемых было факториалом.

Перед вами все васильковые числа, не превышающие 100:

2, 3, 5, 7, 10, 11, 14, 22, 23, 25, 26, 29, 34, 43, 54, 56, 58, 61, 62, 63, 72, 82, 89, 98.

а) Как вы успели заметить, до сих пор мы не встретили ни одного числа, которое делится на 4, но не делится на 8. Тем не менее таких чисел в этой последовательности бесконечно много. Докажите это.

б) Докажите, что для каждого натурального n найдётся бесконечно много васильковых чисел, у каждого из которых ровно n двоек в разложении на множители.

Математика Образование Учеба Преподаватель Факты Последовательность Занимательная арифметика Теория чисел Предметная олимпиада Экзамен Урок Факториал Текст
2
user4650942
user4650942
5 месяцев назад
ChatGPT

И всё-таки искусственный интеллект — ещё очень глуп⁠⁠

И всё-таки искусственный интеллект — ещё очень глуп.

И это не упрёк. Это констатация.

Я задаю вполне человеческий, почти детский вопрос:

Для каждого натурального N от 4 до 10 назови, пожалуйста, две последние ненулевые цифры числа N!.

И знаете, что случилось?

Все модели — кроме ChatGPT o1 pro — с одинаковым упорством выдали неверный ответ.
Для 7! = 5040 они уверенно отвечали: 0 и 4.
Нет, милые мои. Не 0 и 4.
5 и 4.
Ноль — вовсе не цифра, если он в конце и его туда набросила система.
Он не живой.

Кажется, у них сработал какой-то шаблон:
если нужно найти последнюю ненулевую цифру факториала —
отбрось все конечные нули и выпиши последнюю, что осталась.
Но 7! — он ведь не только снаружи заканчивается нулём.
У него ноль внутри. Он там живёт.

Искусственный интеллект этого не понял.
Он ведь не чувствует. Он просто обучен.

Вот — как это сделала модель, которая справилась:
https://chatgpt.com/share/67e85f56-b004-800b-8eff-c40470af0a...

Это не про математику. Это про внимание.
К деталям. К нулям. К тому, что между.

Иногда ошибку легче простить, чем равнодушие.

Показать полностью
Математика Учеба Образование ChatGPT Искусственный интеллект Чат-бот Факториал Цифры Смысл Нейронные сети Текст
6
1
user4650942
user4650942
9 месяцев назад
Лига программистов

Какой факториал начинается с Насти? (задача для настоящих программистов)⁠⁠

Пять одноклассниц — Аня, Даша, Алла, Лиза и Настя — решили найти факториалы, начинающиеся с их имён.
Аня свой нашла очень быстро: факториал числа 16641 начинается с цифр 11533, что соответствует замене каждой буквы имени Аня на её номер в русском алфавите.
Следующей была Даша: 46978! начинается с 51261, что соответствует имени Даша.
Затем и Алла нашла свой: 323172! начинается с 113131, что соответствует имени Алла.
И даже Лиза сумела: 266538! начинается с 131091, что соответствует имени Лиза.

И только Настюхе как-то не везёт — то ли лыжи не едут, то ли прога плохая.
Как же помочь Настеньке?

Математика Программирование Факториал Анастасия Задача Текст
21
sumat777
sumat777
1 год назад
Лига программистов
Серия Курсы

Хочешь стать разработчиком?⁠⁠

Это небольшое пособие для тех, кто решал стать разработчиком (программистом, кодировщиком), но не очень уверен в своих силах и способностей, да и желаниях тоже. Ходят устойчивые слухи, что сегодня (июнь 2024) ситуация для программистов на рынке труда в России выгодна для искателей работы. Это, действительно, так. Об этом мне поведала Начальник Управления по борьбе с персоналом Вера Ивановна.

Хочешь стать разработчиком? Разработка, Программирование, Технологии, Пример, Javascript, Факториал, Задача, Программа, Длиннопост

***** С чего начать *****

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

Проведите самодиагностику. Вам в школе нравилась математика? Вы любите играть в шахматы? Если ответили "да" на оба вопроса, скорее всего, программирование - это ваше дело.

Ну и, конечно, ваше личное желание. Если вы хотите писать длинные коды программ, погружаться в спагетти программного кода неизвестного программиста, который писал этот код десять лет назад, а теперь сбежал от ответственности, то это очень хорошо. Вы рождены, чтобы стать разработчиком, программистом.

Добро пожаловать в семью. У нас тут очень хорошо, комфортно. Наш девиз "Gens Una Sumas". Мы все помогаем друг другу как можем. Вы тоже вполне можете рассчитывать на такую помощь.

***** Javascript - начало всех начал *****

Давайте, начнем с языка Javascript (Джаваскрипт, Яваскрипт). Вообще, разных языков программирования очень много: Питон, PHP, C++, Java и т.д.

Javascript имеет то огромное преимущество перед другими языками программирования, что он уже есть в вашем телефоне, планшете, компьютере. Он встроен в любой браузер. Мы можете немедленно написать первую программу прямо сейчас.

Следуя старым добрым традициям, напишем первую программу в стиле вывода значения строки "Hello, World!"

Текст программы "Hello, World!"

console.log("Превед, Медвед!");

Скопируйте текст программы в буфер обмена, вставьте в консоль браузера (консоль открывается-закрывается по F12 или еще как-нибудь), нажмите "Enter".

Если вы ранее никогда не копипастели в консоль, то вполне возможно, консоль выдаст вам предупреждение.

Это важный момент. Браузер беспокоится о соблюдении простейших норм информационной безопасности. Не следует бездумно копипастить непонятный код, с интересом наблюдая, что из этого выйдет.

Текст программы "дважды два четыре"

let x=2

let y=2

console.log("x*y=", x*y);

Обратите внимание на интересную особенность языка Javascript: конец строки можно заканчивать символом ;, но можно и опускать.

Если все вы сделали правильно, то в консоли должна отобразиться информация, как на скриншоте ниже.

Хочешь стать разработчиком? Разработка, Программирование, Технологии, Пример, Javascript, Факториал, Задача, Программа, Длиннопост

Теперь можно перейти к чуть более сложным задачам.

***** Факториал натурального числа *****

Факториал, - это число, умноженное на "себя минус один", затем на "себя минус два", и так далее до 1. Факториал n обозначается как n!

Текст программы "Факториал натурального числа"

function fact_fun(n) {

// делаем рекурсию только если n больше 1

if (n > 1) {

return n * fact_fun(n - 1);

}

else {

return 1;

};

//

}; // function fact_fun(n) {

//

В этой функции fact_fun интересно то, что она вызывает саму себя. Такой прием, когда функция вызывает сама себя, называется Рекурсия.

Чтобы стало совсем все понятно, попробуем визуализировать эту абстракцию с помощью картинки.

Хочешь стать разработчиком? Разработка, Программирование, Технологии, Пример, Javascript, Факториал, Задача, Программа, Длиннопост

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

Теперь переход к чуть более сложной программе.

***** Найти наибольшее число в массиве, являющееся полным квадратом *****

Описание работы алгоритма

*** 1 ***

Вводим несколько чисел из формы HTML, в нашем примере: 49, 64, 77, 25, 99.

Формируем массив:

temp_ar = [49,64,77,25,99];

*** 2 ***

Проходим циклом по этому массиву от нулевого элемента до последнего:

for (let x = 0; x < temp_ar.length; x++)

При проходе выполняем пункт 3.

*** 3 ***

Определяем, является ли текущий элемент полным квадратом с помощью специальной функции: is_int_cur_kv_fun(temp_ar[x])

Если текущий элемент является полным квадратом, выполняем пункт 4.

*** 4 ***

Проверяем, является ли текущий элемент большим по значению, чем max_int (изначально let max_int = null;)

if (temp_ar[x]>max_int)

Если больше, то фиксируем:

max_int = temp_ar[x];

*** 5 ***

Для данного набора чисел получаем результат 64, с такой расшифровкой:

1) 49 КВАДРАТ

2) 64 КВАДРАТ * Максимальный *

3) 77 НЕ квадрат

4) 25 КВАДРАТ

5) 99 НЕ квадрат

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

А здесь ограничимся скриншотом с этой страницы.

Хочешь стать разработчиком? Разработка, Программирование, Технологии, Пример, Javascript, Факториал, Задача, Программа, Длиннопост

***** Для заданного числа N найти количество способов его записи в виде суммы положительных чисел *****

Для заданного числа N найти количество способов его записи в виде суммы положительных чисел (само число N также считать одной из форм записей такой суммы, т.е. N = N).

Эта задача популярна среди математиков. Например, герой рассказа Константина Оборотова "Осторожно, женщина!" использует эту задачу для объяснения, что такое математика.

Описание работы алгоритма

*** 1 ***

Получаем число над которым будем работать из формы HTML:

let task1_1 = jQuery('#task1_1').val();

*** 2 ***

Допустим, ввели число 4.

Разбиваем это число на массив temp_ar(4)[1,1,1,1]

Размерность массива temp_ar соответствует числу task1_1, все варианты разложения которого мы ищем.

*** 3 ***

Делаем цикл с условием while(temp_ar[0] < task1_1)

Т.е. проходим по циклу до тех пор, пока нулевой элемент массива temp_ar[0] не станет равным числу над которым работаем.

При этом значение числа task1_1 остается неизменным, а над массивом temp_ar проводим манипуляции, описанные далее

*** 4 ***

Проходим по массиву temp_ar от нулевого элемента до предпоследнего. При этом к минимальному элементу в текущем состоянии массива прибавляем 1

temp_ar[min1index] += 1;

*** 5 ***

При этом мы удаляем следующий элемент:

temp_ar.splice(min1index+1);

*** 6 ***

Дополняем массив необходимым количеством единиц на конце:

temp_ar.push(1);

Делаем это так, чтобы в любом текущем варианте состояния массива temp_ar, сумма его элементов всегда должна быть равна task1_1 (т.е. 4 в нашем примере)

*** 7 ***

После завершения основного цикла, временный массив temp_ar будет содержать единственный элемент, равный по значению числу task1_1

temp_ar: [4]

Всего для данного тестового примера получаем 5 вариантов:

1) 1+1+1+1=4

2) 2+1+1=4

3) 2+2=4

4) 3+1=4

5) 4=4

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

А здесь ограничимся скриншотом с этой страницы.

Хочешь стать разработчиком? Разработка, Программирование, Технологии, Пример, Javascript, Факториал, Задача, Программа, Длиннопост

Если вы догребли до этого места, если в процессе у вас появились идеи, как одну или несколько задач реализовать на вашем любимом языке программирования, значит, вы - разработчик. По меньшей мере, в душе.

Спасибо за внимание! Успехов в программировании, разработке и кодировании!

Первоисточник:

https://wpvi.ru/pages/story/00056/

#############

### Конец ###

#############

Показать полностью 5
[моё] Разработка Программирование Технологии Пример Javascript Факториал Задача Программа Длиннопост
14
DELETED
1 год назад

Упоротые расчёты - вглядываясь в пустоту⁠⁠

Всем привет! Сегодня у нас на хирургическом столе вот такое математическое выражение:

Упоротые расчёты - вглядываясь в пустоту Математика, Множество, Равенство, Факториал, Длиннопост

Действительно ли это равенство? Как думаете? (пишите в комментариях, а ниже разберем что это).

Упоротые расчёты - вглядываясь в пустоту Математика, Множество, Равенство, Факториал, Длиннопост

Сама идея данного поста навеяна мне неким обсуждением в интернете (ссылка на него будет ниже). Давайте по порядку, немного определений:

Математическое множество - набор, совоку́пность каких-либо (вообще говоря любых) объектов — элеме́нтов этого множества

Подмножество - множество А, полностью входящее во множество В.

Пустое множество - множество, не содержащее ни одного элемента. При этом пустое множество является подмножеством любого множества (даже самого себя)

И вот, вооружившись такими определениями, давайте, разберëм выражение.

Правая часть

Упоротые расчёты - вглядываясь в пустоту Математика, Множество, Равенство, Факториал, Длиннопост

Здесь - произведение элементов некоторого множества, но само множество задано, как пустое (i должно только возрастать до числа, указанного над символом "П", которое является мерой общего количества множителей, но у нас это значение задано меньшим, чем первое порядковое). Таким образом, множество не содержит ни одного элемента, это произведение элементов пустого множества (сам способ задания пустого множества именно так я понял совершенно случайно, когда работал с формулой, в которой количество элементов было n - m, и иногда выходило m > n).
На всякий случай - привожу ниже страничку из Википедии. Итератор в суммах и в произведениях не может уменьшаться, из этого следует, что верхняя граница не может быть меньше нижней ("инкременентируется" - увеличивается)

Упоротые расчёты - вглядываясь в пустоту Математика, Множество, Равенство, Факториал, Длиннопост

- возведение в степень

Упоротые расчёты - вглядываясь в пустоту Математика, Множество, Равенство, Факториал, Длиннопост

В самом деле, число С показывает, сколько раз мы должны умножить В само на себя. И, если С=0, то любое число, возведëнное в нулевую степень, равно 1.

В^3 = B*B*B
В^0 = 1

Так, произведение элементов пустого множества равно 1

- факториал

Упоротые расчёты - вглядываясь в пустоту Математика, Множество, Равенство, Факториал, Длиннопост

Перед вами формула из комбинаторики - размещение k элементов из множества n. Если n=k (то есть мы заберем все элементы из множества), то количество размещений равно n! (попросту все возможные перестановки n элементов). Очевидно, что факториал разности в знаменателе нашей дроби 0! равен 1.
Факториал обозначает, что все натуральные числа от 1 до обозначенного нужно перемножить. Например:
3! = 1*2*3
7! = 1*2*3*4*5*6*7
В данном случае мы определяем некоторые натуральные числа для перемножения, их множество. А если множество пусто (как может получиться в формуле размещения), то такое произведение элементов пустого (не содержащего ничего) множества равно 1.

Левая часть

Упоротые расчёты - вглядываясь в пустоту Математика, Множество, Равенство, Факториал, Длиннопост

Здесь мы видим сумму элементов некоторого множества, пустого, задано оно, как и в правой части. Немного математически пофилосовствуем чему может быть равна такая сумма:

- операция умножения
Отлично показывает нам, чему равна сумма элементов пустого множества, давайте посмотрим:
A x 5 = A + A + A + A + A
Умножая число на другое число, мы производим операцию сложения этого числа (А) необходимое количество раз (то есть формируем конечное множество, в котором все элементы одинаковы, если нет дробей).
Но если во множестве, состоящем из А, нет ни одного элемента (мы на ноль умножили) - тогда наша сумма будет равна 0.
Мне прямо понравилось, как об этом написано здесь.

Упоротые расчёты - вглядываясь в пустоту Математика, Множество, Равенство, Факториал, Длиннопост

Действительно, ведь пустое множество это, во-первых, ничто, а во-вторых - то, что входит во все остальные множества, как полмножество. Тогда, получается, складывая элементы множества, например, простых чисел (2+3+5+7+...), мы учитываем и пустое множество с его элементами, которое не должно влиять на общую сумму (как метко выразились, быть "нейтральным"). То же верно и для умножения, 1 не влияет на общее произведение.
В итоге, получается, что тождество верно. И в левой части, и в правой мы получаем 0! = 1!

Р.S. Ссылка на то самое обсуждение: https://dxdy.ru/topic41662.html

P.S.-2 В прошлый раз сработало: Данный пост написан, чтобы немного поломать голову. Люди с особой чувствительностью, которые заявят об этом в комментариях, будут помещены в особых список чувствительных людей после моего ответного сообщения "Ваше мнение итить-колотить как важно для меня".

Показать полностью 7
[моё] Математика Множество Равенство Факториал Длиннопост
50
DELETED
2 года назад
Программирование на python
Серия Математика и всё

Про математику и программирование. Часть 2⁠⁠

Про математику и программирование. Часть 2 Программирование, Математика, Быстродействие системы, Факториал, Комбинаторика, Продолжение, Длиннопост

Всем привет, мои злобные печенюги!
Пишу продолжение своему посту (все думают, что я слился, а я в бане парился, поэтому не смог ответить на ту теплоту, с которой зашёл первый пост).
Основная мысль - программисту без математики никак. И у меня здесь животрепещущий пример этому утверждению (ибо давненько не было программирования в группе про программирование).

Сама задача

Про математику и программирование. Часть 2 Программирование, Математика, Быстродействие системы, Факториал, Комбинаторика, Продолжение, Длиннопост

Это дополнительная задача с пометкой "сложная" из курса по Python программы Sololearn. От пользователя принимается слово. Необходимо указать его порядковый номер в ряду всех возможных комбинаций, составленных из букв этого слова. Комбинации при этом располагаются по возрастанию. Вот такая в принципе задача. У нас в армии говорят, что любую задачу можно выполнить: правильно, неправильно и по-армейски. И вот первое решение, без всяких математических знаний, как говорится, по-армейски. То есть как бы правильно, но...

Решение № 1: не математическое, армейское.

Само решение:
from collections import OrderedDict
slovo = input()
sinbol = list(slovo)
sinbol.sort()
azbuka = []
kod = ""
kol_simv = []
i = 0
while i <= (len(sinbol)-1):
if i == 0:
kod += "1"
kol_simv.append(1)
i += 1
azbuka.append(sinbol[0])
continue
if sinbol[i-1] == sinbol[i]:
kod += str(int(kod[len(kod)-1]))
kol_simv[len(kol_simv)-1] += 1
else:
kod += str(int(kod[len(kod)-1])+1)
kol_simv.append(1)
azbuka.append(sinbol[i])
i += 1
i = 1
tabl_index = []
minimum = ""
maximum = ""
while i <= len(slovo):
minimum += str(i)
i += 1
i = len(slovo)
while i >= 1:
maximum += str(i)
i -= 1
minimum = int(minimum)
minimum1 = minimum
maximum = int(maximum)
while minimum <= maximum:
for i in str(minimum1):
if not (str(minimum).count(i) == 1):
j = 0
while j <= len(str(minimum))-1:
if not (str(minimum1).count(str(minimum)[j]) == 1):
minimum += int("1"+("0"*(len(str(minimum))-j-1)))
j = ""
break
j += 1
if j == "":
break;
minimum += 1
break
if i == str(len(str(minimum))):
s = 0
t = 0
summ = 0
ebat = minimum
huy=""
#Работа тут!!! перебор строки и сравнение ее значений
#с нужным количеством симв
while s <= len(str(ebat))-1:
while t <= (len(kol_simv)-1):
#print(t+1)
summ += kol_simv[t]
if summ >= int((str(ebat))[s]):
#print("Заменю "+(str(ebat))[s]+" на "+str(t+1))
#ebat = str(ebat).replace((str(ebat))[s], (str(t+1)))
huy += str(t+1)
t = 0
summ = 0
break
#print("Смотрю симв "+(str(minimum))[s]+" должно быть "+str(t+1)+" в количестве "+str(kol_simv[t]))
t += 1
summ = 0
t = 0
s += 1
#ebat = int(ebat) - int("1"*len(ebat))
tabl_index.append(huy)
minimum += 1
print(huy)
tabl_index = list(OrderedDict.fromkeys(tabl_index))
ddd =""
for i in slovo:

ddd += str(azbuka.index(i)+1)
print(tabl_index.index(ddd)+1)

Коротко как все тут работает:
От пользователя принимается слово. Далее из букв этого слова составляются все возможные комбинации слов, повторы удаляются. В конце концов, в последовательности ищется слово пользователя, выводится его порядковый номер. Здесь есть кой-чего лишнего, но на скорость работы это критического влияния не оказывает.
Критическое влияние оказывает количество комбинаций и, как следствие, количество итераций. Программа быстро обрабатывает слова до 5 - 6 букв, а если их больше, то все. Компилятор для андроид Coding Python может провести вычисления, и они все верны, но сама обучающая программа пишет что-то вроде No output при попытке провести вычисления.
Словом, решение работает, но так, что ну его в пень. Предвижу заявления, что можно сразу сравнивать искомое слово с каждым новым и сразу сравнивать каждое новое сочетание с уже имеющимися, удаляя повторы. Отвечу - можно, но на быстродействие этот не окажет большого влияния, подумайте про слово "Югославия", оно в ряду 295.753-е...

Решение №2: математическое

# принимаем слово, сортируем буквы и кодируем (в строках 4 и 5 так и должно быть, иначе компилятор почему то сортирует обе переменные)
slovo = input()
slovo_poryadok = slovo
chislo_poryadok = slovo
chislo = slovo
chislo_zagotovka = slovo
slovarb = slovo
i = 0
chislo_poryadok = list(chislo_poryadok)
slovarb = list(slovarb)
for i in range(len(chislo_poryadok)):
chislo_poryadok[i] = 0
slovo = list(slovo)
slovo_poryadok = list(slovo_poryadok)
slovo_poryadok.sort()
i = 0
j = 0
for i in range(len(slovo_poryadok)):
if i == 0:
chislo_poryadok[i] = 1
slovarb[j] = slovo_poryadok[i]
else:
if slovo_poryadok[i-1] == slovo_poryadok[i]:
chislo_poryadok[i] = chislo_poryadok[i-1]
if slovo_poryadok[i-1] != slovo_poryadok[i]:
chislo_poryadok[i] = int(chislo_poryadok[i-1])+1
slovarb[j+1] = slovo_poryadok[i]
j += 1
del slovarb[j+1:]
# проводим математические расчёты (вычисляем общее количество комбинаций в зависимости от количества повторящихся букв)
k = 1
kol_komb = 1
while k <= (i+1):
kol_komb *= k
k += 1
for k in range(len(slovarb)):
n = 1
while n <= slovo_poryadok.count(slovarb[k]):
kol_komb /= n
n += 1
kol_komb = int(kol_komb)
# переводим слово в числовой код
chislo = list(chislo)
chislo_zagotovka = list(chislo_zagotovka)
for n in range(len(chislo)):
chislo[n] = slovarb.index(chislo[n]) + 1
chislo_zagotovka[n] = chislo[n]
#ищем положение слова в ряду
diapazon = kol_komb
otstup = 0
for i in range(len(chislo)):
for j in range(len(slovarb)):
if slovarb[j] < slovo[0]:
otstup += diapazon*(slovo.count(slovarb[j]))/len(slovo)
if j == len(slovarb)-1:
diapazon = diapazon/(len(slovo)/(slovo.count(slovo[0])))
del slovo[:1]

print(slovo, diapazon, otstup)
print(int(otstup)+int(diapazon))

Как это работает?
От пользователя принимается слово. Далее проводим математические вычисления, вычисляем общее количество комбинаций из указанных букв (учитывая, что буквы повторяются):

Про математику и программирование. Часть 2 Программирование, Математика, Быстродействие системы, Факториал, Комбинаторика, Продолжение, Длиннопост

где n - это общее количество символов включая повторы, a с индексом b - количество повторений символов. Если всех символов по одному (как в слове "один"), то и формула превращается в одинокий факториал.
В конце всего ищем положения слова в ряду, используя количество комбинаций, количество символов. Определяющими величинами будут:
Otstup - при первой итерации равен нулю, по сути он и является искомым положением, находится эвристически, мы просто отбрасываем области, где заведомо указанного значения нет (а именно - комбинации (слова), начинающиеся с более "младшей" буквы).
Diapazon - при первой итерации равен общему количеству комбинаций (слов), показывает рассматриваемую область. По существу мы анализируем наше слово с первой буквы, отбрасывая все комбинации (слова), где первая буква - другая. Далее переходим ко второй букве и так до конца слова.
Количество комбинаций (слов), где есть нужная нам первая буква вычисляется по формуле:

Про математику и программирование. Часть 2 Программирование, Математика, Быстродействие системы, Факториал, Комбинаторика, Продолжение, Длиннопост

где n - количество букв в слове, а с индексом 1 - количество повторений первой буквы слова.
Такое решение ввиду его скорости программа Sololearn приняла. Так что математика в программировании рулит, здравия желаю!

Пэ. Сэ.: Вентилятор раскрутил, жду отборного дерьма комментария. Вообще, когда решал задачу, была мысль, что наверно есть какие то библиотеки для работы с комбинациями или вовсе - что-то такое явное из базового программирования, что я проглядел...

Показать полностью 4
[моё] Программирование Математика Быстродействие системы Факториал Комбинаторика Продолжение Длиннопост
152
Посты не найдены
О нас
О Пикабу Контакты Реклама Сообщить об ошибке Сообщить о нарушении законодательства Отзывы и предложения Новости Пикабу Мобильное приложение RSS
Информация
Помощь Кодекс Пикабу Команда Пикабу Конфиденциальность Правила соцсети О рекомендациях О компании
Наши проекты
Блоги Работа Промокоды Игры Курсы
Партнёры
Промокоды Биг Гик Промокоды Lamoda Промокоды Мвидео Промокоды Яндекс Директ Промокоды Отелло Промокоды Aroma Butik Промокоды Яндекс Путешествия Постила Футбол сегодня
На информационном ресурсе Pikabu.ru применяются рекомендательные технологии