Модераторы: Poseidon

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [Алгоритм] Перестановка разрядов числа (перебор), кол-во разрядов не известно,только циклы 
V
    Опции темы
KasMP
Дата 28.10.2008, 20:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Завсегдатай
Сообщений: 586
Регистрация: 8.8.2006

Репутация: 1
Всего: 30



Приветствую smile !
Цитата
В заданном натуральном числе выбрать некоторые цифры так, чтобы образованное ими число было максимальным простым числом.

Уточнения: 
  • порядок цифр можно менять;
  •  каждая цифра в полученном числе может встречаться не больше раз, чем в первоначальном.
Например, для числа 137 нужно рассматривать не только 1, 3, 7, 13, 17, 37, 137, но и 713, 731, 371, 317, 173, 73, 71, 31.

Использовать можно только циклы и условия smile  smile .

Организовать сам перебор для заранее известного кол-ва разрядов числа мне удалось (видимо, не самым оптимальным образом, но все же удалось):
Код

short a, b, c, d;
short p;

for (a=1; a<p; a++)
          for (b=1; b<p; b++) {
              if (a==b) continue;
              for (c=1; c<p; c++) {
                  if (c==a || c==b) continue;
                  for (d=1; d<p; d++) {
                      if (d==a || d==b || d==c) continue;
                      
                      // вычисление числа с текущей комбинацией цифр                    
                      // проверка текущего числа на простоту
                      // запоминание нового простого (если оно больше)

1) Но на самом деле мы же не знаем, сколько разрядов будет!!! Кол-во разрядов сосчитать несложно, а вот как потом это число вклинить в циклы smile: . Рекурсию использовать не получится, т.к. функций "нет".
2) Если для числа из n разрядов ни одно полученное из n цифр число - не простое, то надо уменьшать кол-во участвующих цифр до (n-1) ; потом, если опять нет простого, уменьшать до n-2. Я не могу догадаться, как занулить коэффициент перед текущей лишней цифрой.

Жавайте подумаем вместе, пожалуйста smile .
PM MAIL   Вверх
mr.Anderson
Дата 28.10.2008, 20:50 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


iOS Lead Developer
****


Профиль
Группа: Участник Клуба
Сообщений: 3374
Регистрация: 20.12.2004
Где: далеко

Репутация: 16
Всего: 128



KasMP, задачка на самом деле интересная.

Выделить цифры числа не составляет проблем, это простенький цикл while, который не зависит от конкретного конечного значения переменной-счетчика, как тот же for. Параллельно с этим мы можем и посчитать количество цифр собственно в исходном числе. После этого требуется просчитать все возможные перестановки этих цифр, из каждой перестановки делать число и проверять его на простоту.

Для меня тут единственная проблема - найти все перестановки. smile Это вроде как из области комбинаторики, я даже если и найду метод, то наверняка очень медленный.


--------------------
user posted image

user posted image
PM MAIL ICQ Skype   Вверх
KasMP
Дата 28.10.2008, 20:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Завсегдатай
Сообщений: 586
Регистрация: 8.8.2006

Репутация: 1
Всего: 30



Непосредственно вычисление числа с текущей комбинацией цифр  у меня происходит так:
в верхней строчке - общая формула;
 ниже - степени 10, которые будут подставляться в формулу для получение числа с текущей комбинацией.

Добавлено через 3 минуты и 5 секунд
Цитата(mr.Anderson @  28.10.2008,  20:50 Найти цитируемый пост)
Выделить цифры числа не составляет проблем

Выделить-то их можно, вот только положить их некуда: массивов "нет", списков "нет", сколько переменных под них надо - тоже неизвестно.
Цитата(mr.Anderson @  28.10.2008,  20:50 Найти цитируемый пост)
Для меня тут единственная проблема - найти все перестановки.
Я уже писала, что для заранее известного числа разрядов у меня получается (только занулять некоторые разряды я пока не умею), а для неизвестного - нет.

Добавлено через 4 минуты и 20 секунд
Цитата(mr.Anderson @  28.10.2008,  20:50 Найти цитируемый пост)
Для меня тут единственная проблема - ...
Я свои проблемы написала в пунктах 1) и 2) smile .

PM MAIL   Вверх
Akina
Дата 28.10.2008, 22:12 (ссылка) |  (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 17
Всего: 454



Цитата(KasMP @  28.10.2008,  21:39 Найти цитируемый пост)
Рекурсию использовать не получится

Ерунда. Чисто рекурсивная задача. Тебя смущает повторение цифр? плюнь на него, считай, что все они различны, просто при повторениях немного пострадает оптимальность.
Сначала все цифры сваливаются в массив, потом запускается рекурсивная процедура составления чисел из этого набора цифр (фактически - генерация всех перестановок). Если в массиве не исчерпаны цифры - оставшиеся по одной присоединяются к промежуточному набору, и полученное отправляется на следующий этаж рекурсии. После чего пришедшая на этот этаж комбинация проверяется на то, что она а) больше текущего простого б) является простым. Само собой, на последнем этаже будет только проверка, потому что не будет рекурсивных вызовов.

Если же использование функций "запрещено" - организуй псевдорекурсию. Она как раз организуется условными циклами. Просто для хранения текущего состояния системы и всех предыдущих потребуется не двумерный, а трехмерный массив. Впрочем, сначала таки напиши рекурсивное решение - превратить его в псевдорекурсивное в разы проще, чем сразу делать псевдорекурсию.

И последнее - запрет на функции мне представляется идиотизмом. Неужели и проверку на простоту тоже придется втискивать в plain code?

Это сообщение отредактировал(а) Akina - 28.10.2008, 22:23


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
maxim1000
Дата 29.10.2008, 00:01 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 3334
Регистрация: 11.1.2003
Где: Киев

Репутация: 24
Всего: 110



во-первых, без дополнительных ограничений здесь большие проблемы
насколько я понимаю, по умолчанию предполагается, что входное число помещается в unsigned int
однако даже в этом случае некоторые числа, полученные перестановкой цифр уже не будут помещаться
например, максимально допустимое число для unsigned int = 4294967296, стоит поменять первую 4-ку с 9-кой и число помещаться перестанет

так что решение задачи без ограничения или даже для всех допустимых unsigned int потребует реализации длинной арифметики, особенно интересно будет реализовывать проверку кратности smile
в прнципе, рекурсий там вроде бы не наблюдается, но без функций та ещё задача

это всё настолько ужасно, что нужны какие-то ограничения
для простоты предположу, что самое большое число из заданных цифр помещается в unsigned int (есть ещё пограничный случай, когда ответ помещается, а максимальное число - нет)

тогда просто сортируем исходного числа так, чтобы максимальная была старшей (све сортировки - пузырьком - самый простой и без рекурсии), а потом начинаем отнимать по 1 от него и проверять две вещи:
1. что набор цифр совпадает с исходным - сортируем оба и сравниваем
2. что текущее число является простым
первое найденное число и есть ответ, т.к. мы шли с наибольшего постепенно уменьшая

конечно, возможна просто куча оптимизаций, но это вполне может быть начальным вариантом

Добавлено через 10 минут и 16 секунд
Цитата(Akina @  28.10.2008,  22:12 Найти цитируемый пост)
Ерунда. Чисто рекурсивная задача.

Цитата(Akina @  28.10.2008,  22:12 Найти цитируемый пост)
И последнее - запрет на функции мне представляется идиотизмом. Неужели и проверку на простоту тоже придется втискивать в plain code?

а вот тут я бы поспорил
умение решать задачу самыми разнообразными инструментами, даже теми, которые, на первый взгляд не подходят, - вполне небесполезное умение в нашей работе
как иначе можно додуматься, например, до использования преобразования Фурье для умножения больших чисел, а умножения матриц для вычисления чисел Фибоначчи? smile

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



--------------------
qqq
PM WWW   Вверх
maxim1000
Дата 29.10.2008, 00:16 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 3334
Регистрация: 11.1.2003
Где: Киев

Репутация: 24
Всего: 110



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

Это сообщение отредактировал(а) maxim1000 - 29.10.2008, 00:17


--------------------
qqq
PM WWW   Вверх
Akina
Дата 29.10.2008, 00:47 (ссылка) |   (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 17
Всего: 454



Цитата(maxim1000 @  29.10.2008,  01:01 Найти цитируемый пост)
умение решать задачу самыми разнообразными инструментами, даже теми, которые, на первый взгляд не подходят, - вполне небесполезное умение в нашей работе

В данном случае я бы тоже поспорил - между методом (подходом и пр.) и инструментом есть таки некоторая разница.

Цитата(maxim1000 @  29.10.2008,  01:16 Найти цитируемый пост)
выделить итератор по нетривиальному множеству

Ты предлагаешь искать подходящие. Я - строить. А вся начинка этой обвязки у нас получится совершенно одинакова. Вот если начать тупо генерить ряд простых и каждое проверять на соответствие набора цифр - тогда можно говорить о взгляде с другой стороны.


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
maxim1000
Дата 29.10.2008, 01:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 3334
Регистрация: 11.1.2003
Где: Киев

Репутация: 24
Всего: 110



Цитата(Akina @  29.10.2008,  00:47 Найти цитируемый пост)
Ты предлагаешь искать подходящие. Я - строить. А вся начинка этой обвязки у нас получится совершенно одинакова.

нет-нет
я не ту разницу имел в виду
итерация и у меня, и у тебя, действительно по числам с нужными цифрами
но представлена она может быть двумя способами:
1. можно выделить во внешнюю функциональность проверку числа на простоту и передавать её в виде функтора в рекурсивные функции
2. а можно выделить во внешнюю функциональность проход по всем числам с нужными цифрами

первый порыв, конечно, - решить задачу первым методом

однако второй подход предоставляет дополнительную (в некоторых случаях полезную) гибкость: например, пройтись параллельно по двум таким образом заданным разным множествам и посчитать что-нибудь для пар


--------------------
qqq
PM WWW   Вверх
Akina
Дата 29.10.2008, 08:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 17
Всего: 454



а-а-а... 


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
Silent
Дата 23.11.2008, 12:36 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 252
Регистрация: 3.10.2006

Репутация: 6
Всего: 9



Задача, конечно, интересная, но решаемая. Вкратце:
1) Получить подмножество цифр (1, 13, 17, 37, 137);
2) получить все перестановки из текущего подмножества и среди них найти самое большое простое число.
Пункт первый решается элементарно: пусть число состоит из n разрядов (десятичных). Тогда все подмножества можно получить простым циклом от 1 до 2^n. Поясню. Для 137 необходимо три разряда. Соответственно цикл от 1 до 7, запишу их в двоичном коде:
001   //множество [7]
010  //[3]
011  //[37]
100  //[1]
101  //[17]
110  //[13]
111  //[137]
Таким образом, у нас есть алгоритм для генерации всех подмножеств. Зачем он нам нужен? чтобы путем перестановки элементов этого множества получать различные комбинации. Данная подзадача возникает для каждого подмножества - нужно сгенерировать все перестановки для [3] (правда для этого множества она всего-лишь одна smile), для [37] (37, 73), ..., [137] (137, 173, 317, 371, 713, 731). Оказывается, это тоже можно сделать только лишь циклом. Главное - отделить мух от котлет. Вот передо мной лежит учебник Окулова С.М. ("Программирование в алгоритмах", изд-во "БИНОМ. Лаборатория знаний", 2004г), открытый на странице 37, и мне влом вколачивать сюда приведенный там код.
Ну и в догонку - полученные числа можно проверить на простоту решетом Эратосфена, благо оно строится тоже только лишь циклом.
P.S. Если ничо непонятно - у вас всегда есть возможность написать мне письмо для более подробных разъяснений smile
PM MAIL   Вверх
KasMP
Дата 24.11.2008, 23:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Завсегдатай
Сообщений: 586
Регистрация: 8.8.2006

Репутация: 1
Всего: 30



Silent, очень неожиданно smile .

Все очень понятно smile .
Только решето Эратосфена, по-моему, здесь не совсем к месту: решетом удобно пользоваться тогда, когда нужно получить список всех простых чисел до заданного; а когда нужно проверить на простоту конкретное число, то решето, конечно, можно приспособить... но уж слишком коряво получается. Ну да ладно, проблема не в проверке на простоту smile .

Цитата(Silent @  23.11.2008,  12:36 Найти цитируемый пост)
Задача, конечно, интересная, но решаемая.
К сожалению или к счастью, мне всегда достаются самые интересные задачки smile  smile  smile smile .
Цитата(Silent @  23.11.2008,  12:36 Найти цитируемый пост)
Вот передо мной лежит учебник Окулова С.М. ("Программирование в алгоритмах", изд-во "БИНОМ. Лаборатория знаний", 2004г), открытый на странице 37, и мне влом вколачивать сюда приведенный там код.
Большое человеческое спасибо smile smile уже за то, что вам было не влом откопать эту тему, вникнуть, открыть учебник (я искала алгоритмы... результат, как видно, не блестящий) и еще все это написать smile .
Цитата(Silent @  23.11.2008,  12:36 Найти цитируемый пост)
P.S. Если ничо непонятно - у вас всегда есть возможность написать мне письмо для более подробных разъяснений
Здесь-то мне теперь все понятно...
Но у меня есть другие задачки, алгоритмы для которых не получилось придумать быстро, не получилось найти (думать основательно я пока не пробовала). Заставлю себя подумать всерьез  smile  (время еще есть smile ).

P.S.. И все же слишком внезапно smile  smile ...

Добавлено через 5 минут и 53 секунды
Цитата(Akina @  28.10.2008,  22:12 Найти цитируемый пост)
Сначала все цифры сваливаются в массив
Цитата(Akina @  28.10.2008,  22:12 Найти цитируемый пост)
Просто для хранения текущего состояния системы и всех предыдущих потребуется не двумерный, а трехмерный массив.
Я была бы счастлива так сделать, но массивов тоже "нет" smile  smile !

Добавлено через 9 минут и 28 секунд
Цитата(maxim1000 @  29.10.2008,  00:01 Найти цитируемый пост)
во-первых, без дополнительных ограничений здесь большие проблемы
Да, у меня тоже были такие вопросы...
Ответ такой:
  • изначально число типа integer;
  • при генерации перестановок проверять, не получилось ли что-то типа "95431", "39423", т.п.; если получилось, то пропускать

Добавлено через 12 минут и 44 секунды
Цитата(maxim1000 @  29.10.2008,  00:01 Найти цитируемый пост)
конечно, возможна просто куча оптимизаций, но это вполне может быть начальным вариантом
Самое первое, что пришло в голову - вычитать не 1, а 2 smile ... Зачем нам четные числа smile? Ну да ладно, это слишком очевидная оптимизация smile.
Вообще, maxim1000, у тебя всегда возникают очень интересные варианты smile .
PM MAIL   Вверх
Akina
Дата 25.11.2008, 00:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 17
Всего: 454



Цитата(KasMP @  25.11.2008,  00:37 Найти цитируемый пост)
Я была бы счастлива так сделать, но массивов тоже "нет"

Ну строковые-то переменные есть? а что есть строка как не массив символов?


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
KasMP
Дата 25.11.2008, 00:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Завсегдатай
Сообщений: 586
Регистрация: 8.8.2006

Репутация: 1
Всего: 30



Цитата(Akina @  25.11.2008,  00:16 Найти цитируемый пост)
Ну строковые-то переменные есть? а что есть строка как не массив символов? 

В нашем случае строки "есть", но именно как массив символов - у нас C++  smile smile !
PM MAIL   Вверх
Silent
Дата 25.11.2008, 00:39 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 252
Регистрация: 3.10.2006

Репутация: 6
Всего: 9



KasMP, очень рад что тебе пришлась по душе такая вещь, как генерация множеств.
Но, я так понимаю, тебе не нравится что в приведенном мной источнике по генерации всех перестановок из множества используется массив? на это замечание я потрясу все той же книжкой, попросив тебя перелистнуть страницу и прочитать со слов "четвертая задача" (жирным шрифтом выделено). Это - генерация перестановки по его номеру. А номер - от 1 до N!, где N - количество элементов в множестве. Таким образом, все опять сведется к массиву for (int i=1;i<N!;i++), где ты будешь получать по номеру очередную перестановку. Только придется шибко подумать над тем как извратиться - и вместо предлагаемого автором книги (и моим деканом по совместительству ;-)) множества использовать битовое поле. Я уже даже почти созрел до того, чтобы таки пересилить лень и написать тебе код smile

Добавлено через 2 минуты и 5 секунд
*строку "все опять сведется к массиву for (int i=1;i<N!;i++)" читать как "все опять сведется к циклу for (int i=1;i<N!;i++)"
PM MAIL   Вверх
Silent
Дата 26.11.2008, 23:10 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 252
Регистрация: 3.10.2006

Репутация: 6
Всего: 9



Все в мире фигня, кроме пчел. Но если подумать, то и пчелы - фигня. Винни Пух®
Я не стал сливать все в кучу для "только циклы и условия", оставлю как есть, с процедурами и функциями, для наглядности. Воспитание не позволяет.
Код

//made by Silent
#include <iostream>
#include <math.h>

using namespace std;

int X; //this number

inline int DecToOther(int x, int base)
{
    int tmp = x;
    int res = 0, a = 1;
    while (tmp!=0)
    {
        res += ((tmp%base)*a);
        a *= 10;
        tmp /= base;
    }
    return res;
}

inline bool Good(int y)
{
    unsigned int flag = 0;
    int tmp = y;
    bool res = true;
    while ((tmp!=0)&&(res))
    {
        res = ((flag & (1<<(tmp%10))) == 0) & (tmp%10 != 0);
        flag |= (1<<(tmp%10));
        tmp /= 10;
    }
    return res;
}

inline int GetPosition(int number, int pos)
{
    if (pos == 0) return 0;
    int tmp = number;
    for (int i=1;i<pos;i++) tmp /= 10;
    return tmp%10;
}

inline int MakeNumber(int x, int y)
{
    if (x == 0) return y%10;
    int tmp = x;
    int res = 0, base = 1;
    while ((tmp!=0))
    {
        res += (base*GetPosition(y,tmp%10));
        tmp /= 10;
        base *= 10;
    }
    return res;
}

inline bool Prime(int x)
{
    bool res = (x%2!=0);
    int i = 3;
    int end = (int)floor(sqrt((double)x));
    while (res && (i<=end))
    {
        res = (x%i != 0);
        i++;
    }
    return res;
}

int main()
{
    cin >> X;
    int count, tmp = X, best = 1;
    for (count = 1; tmp>0; tmp /=10, count++);
    int n_ = 1;
    for (int i=0;i<count-1;i++, n_ *= count);
    for (int i=0;i<n_;i++)
    {
        int y = DecToOther(i,count);
        if (Good(y))
        {
            y = MakeNumber(y,X);
            if (Prime(y) && (y > best)) best = y;
        }
    }
    cout << best;
    return 0;
}

P.S. а все-таки я крут (маньяк, дурак, нужное подчеркнуть smile )
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Центр помощи"

ВНИМАНИЕ! Прежде чем создавать темы, или писать сообщения в данный раздел, ознакомьтесь, пожалуйста, с Правилами форума и конкретно этого раздела.
Несоблюдение правил может повлечь за собой самые строгие меры от закрытия/удаления темы до бана пользователя!


  • Название темы должно отражать её суть! (Не следует добавлять туда слова "помогите", "срочно" и т.п.)
  • При создании темы, первым делом в квадратных скобках укажите область, из которой исходит вопрос (язык, дисциплина, диплом). Пример: [C++].
  • В названии темы не нужно указывать происхождение задачи (например "школьная задача", "задача из учебника" и т.п.), не нужно указывать ее сложность ("простая задача", "легкий вопрос" и т.п.). Все это можно писать в тексте самой задачи.
  • Если Вы ошиблись при вводе названия темы, отправьте письмо любому из модераторов раздела (через личные сообщения или report).
  • Для подсветки кода пользуйтесь тегами [code][/code] (выделяйте код и нажимаете на кнопку "Код"). Не забывайте выбирать при этом соответствующий язык.
  • Помните: один топик - один вопрос!
  • В данном разделе запрещено поднимать темы, т.е. при отсутствии ответов на Ваш вопрос добавлять новые ответы к теме, тем самым поднимая тему на верх списка.
  • Если вы хотите, чтобы вашу проблему решили при помощи определенного алгоритма, то не забудьте описать его!
  • Если вопрос решён, то воспользуйтесь ссылкой "Пометить как решённый", которая находится под кнопками создания темы или специальным флажком при ответе.

Более подробно с правилами данного раздела Вы можете ознакомится в этой теме.

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Poseidon, Rodman

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Центр помощи | Следующая тема »


 




[ Время генерации скрипта: 0.1190 ]   [ Использовано запросов: 23 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.