Школа программиста

Забыли пароль?
[задачи] [курсы] [олимпиады] [регистрация]
Логин:   Пароль:    
Скрыть меню
О школе
Правила
Олимпиады
Фотоальбом
Гостевая
Форум
Архив олимпиад
Архив задач
Состояние системы
Рейтинг
Курсы
Новичкам
Работа в системе
Курсы ККДП
Дистрибутивы
Статьи
Ссылки


 
Вернуться
Тема: Про n!
1
  1  Мнение, 04 октября 2010 г. 21:55:00
      Вообще, насколько я понимаю, программа генерирует одну и ту же перестановку символов. Тогда для какой-либо конкретной перестановки количество шагов до возврата равно НОКу всех "циклов" (под циклами понимается замкнутая цепочка переходов) в перестановке. Если же перестановка, которую генерирует программа неизвестна, то ответом является максимум среди всех подобных переходов. Т.е. максимальный НОК из чисел, которые в сумме дают n. Еще не знаю как это сделать, но думаю, что значение здесь меньше факториала.
  2  Ладик Артём, 04 октября 2010 г. 19:30:53
      Короче могу сказать только суть...
Есть файл длинной из n символов.... есть программа которая какимто образом переставлят символы в файле, но эти перестановки зависят ТОЛЬКО от количества символов в файле... Мальчик у мальчика Вовы был файл длинной n символов. Он запустил программу и символы переставились... Вопрос: Какое минимальное количество раз ему нужно запустить программы, чтобы гарантировать получение исходного файла....
Я решал так
ans = n! - 1
  3  Нигматуллин Нияз Габдуллазянович [СПбГУ ИТМО], 04 октября 2010 г. 16:40:02
      а в чем задача?
  4  Ладик Артём, 03 октября 2010 г. 21:11:47
      пробовал хранить по модулю 10^9 не помогает... конечно может я задачу не правильно решал, но все тесты что в 2 сек укладывались проходили...
  5  Ладик Артём, 03 октября 2010 г. 21:09:15
      Вроде возможно. Я вчера на олимпиаде такую задачу решал...
  6  Яхнев Иван Николаевич, 03 октября 2010 г. 15:19:38
      Можно попробовать найти разложение числа n! на простые множители. Завести массив чисел s[1..n]. Затем для каждого числа от 1 до n найти все его делители (одинаковый нужно учитывать). При нахождении очередного делителя надо увеличить элемент s[ делитель ] на единицу. Число n! будет равно произведению всех чисел j от нуля до n в степени s[j]. (n! = 1^s[1] * 2^s[2] * ... * (n-1)^s[n-1] * n^s[n]). Основную массу множителей будут составлять маленькие числа (для n=100000): 2 будет входить 99994 раза, 3 - 49995, 5 - 24999, 7 - 16662, 11 - 9997, 13 - 8331, 17 - 6249. Значит чтобы меньше производить вычислений можно вычислять n!, начиная с чисел n, n-1, n-2, ... 3, 2, 1. (при этом используя быстрое возведение в степень). В две секунды, наверное, сложно будет уложиться.

Можно также попробовать применить дерево Фенвкика.
  7  Беляев Сергей Николаевич, 03 октября 2010 г. 13:06:00
      А такое точно возможно? О прекалке тоже речи идти не может, слишком много будет "весить", если хранить даже через каждую тысячу...
  8  Ладик Артём, 03 октября 2010 г. 12:42:24
      Как ТОЧНО вычислить факториал числа 100000 меньше чем за 2 секунды.... кто поможет буде очень благодарен...
ПС. не нужно ссылок на другие сайты... пишите идеи здесь
1

Чтобы оставить сообщение необходимо зарегистрироваться и авторизоваться!

Красноярский краевой Дворец пионеров, (c)2006 - 2026, ИНН 246305493507, E-mail: admin@acmp.ru