Список форумов ZCon ZCon
Соревнования по программированию
 
 FAQFAQ   ПоискПоиск   ПользователиПользователи   ГруппыГруппы   РегистрацияРегистрация 
 ПрофильПрофиль   Войти и проверить личные сообщенияВойти и проверить личные сообщения   ВходВход 

Ваши решения для задачи В ожидании начала ZCon2008

 
Начать новую тему   Ответить на тему    Список форумов ZCon -> ZCon 2008
Предыдущая тема :: Следующая тема  
Автор Сообщение
Turbo
Site Admin


Зарегистрирован: 19.02.2006
Сообщения: 248

СообщениеДобавлено: Ср Апр 16, 2008 8:53 am    Заголовок сообщения: Ваши решения для задачи В ожидании начала ZCon2008 Ответить с цитатой

В этой теме можно обсудить ваш подход к решению этой задачи.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
Michael



Зарегистрирован: 16.04.2008
Сообщения: 5

СообщениеДобавлено: Ср Апр 16, 2008 1:42 pm    Заголовок сообщения: Ответить с цитатой

Интересно, как были получены результаты больше 33 млн (не говоря уже про 57) ?

Я решал классически - сначала проверял на маленькие делители
по предварительным табличкам делимости, потом (то что осталось) - вероятностным алгоритмом, ну и оставшиеся несколько непростых убивал просто табличкой...

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

Наверное, можно было еще оптимизировать, но
блин не в четыре же раза. Очевидно фишка в подходах.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
pperm



Зарегистрирован: 25.02.2007
Сообщения: 26

СообщениеДобавлено: Ср Апр 16, 2008 1:56 pm    Заголовок сообщения: Ответить с цитатой

Ну можно получить не плохого результата если сделать что-то похожее на решето.

для числа a мы можем легко найти его номер в последовательности...

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



Зарегистрирован: 25.01.2007
Сообщения: 11

СообщениеДобавлено: Ср Апр 16, 2008 2:17 pm    Заголовок сообщения: Ответить с цитатой

Michael писал(а):
Интересно, как были получены результаты больше 33 млн (не говоря уже про 57) ?

Хорошо написанное решето Эратосфена нашло все простые числа до 2147483647 примерно за 10 секунд, дальше все проверки на простоту шли за O(1).
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Werewolf



Зарегистрирован: 16.03.2007
Сообщения: 28

СообщениеДобавлено: Ср Апр 16, 2008 3:28 pm    Заголовок сообщения: Ответить с цитатой

Сначала проверка на делимость на простые до 71-го. В процессе выяснилось, что gcc не умеет оптимизировать деление на константу, пришлось делать самому.
Если не прокатило - тест Миллера-Рабина псевдопростоты по основанию 2. На некоторых числах тест обламывался - пришлось захардкодить их )
Все оптимизировано на асме )
_________________
Þá skelfur askr Yggdrasils, ok engi hlutr er þá óttalaus á himni eða jörðu.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Michael



Зарегистрирован: 16.04.2008
Сообщения: 5

СообщениеДобавлено: Ср Апр 16, 2008 3:45 pm    Заголовок сообщения: Ответить с цитатой

Цитата:
...решето Эратосфена...


Как все просто...
У меня была такая мысль, но, честно говоря, постеснялся хапать столько памяти (2^27 байт - по биту на нечетное число = 130 метров),
и дальше в эту сторону не думал...

Очевидно, зря Smile
Можно было бы, наверное, и выдумать, как поэкономить память...
Да и решето разогнать - то же Аткина к примеру...
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Michael



Зарегистрирован: 16.04.2008
Сообщения: 5

СообщениеДобавлено: Чт Апр 17, 2008 1:22 pm    Заголовок сообщения: Ответить с цитатой

Werewolf писал(а):
...Все оптимизировано на асме )


А можно примерчик инлайна или Си-функции на асме.
А то я как ни пытался, так и не смог заставить GCC сожрать свои вставки Sad
Тупо синтаксис не проходил...
(Пытался степени двойки по модулю взять...)
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Werewolf



Зарегистрирован: 16.03.2007
Сообщения: 28

СообщениеДобавлено: Чт Апр 17, 2008 2:15 pm    Заголовок сообщения: Ответить с цитатой

Проверяет, является ли n сильно псевдопростым по основанию 2, возвращает '1' или '0'.
Код:
char isPrimeRabin( unsigned n )
{
   char b = '0';

asm (
   "mov %7,%2;\
   mov %2,%1;\
   dec %1;\
   bsf %1, %4;\
   mov %4, %%ebp;\
   shr %%cl, %1;\
   mov %1, %4;\
   mov %1, %6;\
   and $0x1F, %4;\
   mov $1, %1;\
   shl %%cl, %1;\
   mov $5, %%cl;\
   shr %%cl, %6;\
   jz exit;\
   mov %1, %4;\
   inc %5;\
   xor %1, %1;\
   div %2;\
cycle:;\
   shr $1, %6;\
   jz last;\
   jnc mulx;\
   mov %5, %3;\
   mov %4, %1;\
   mul %3;\
   div %2;\
   mov %5, %4;\
   mov %3, %5;\
mulx:;\
   mov %5, %1;\
   mul %1;\
   div %2;\
   jmp cycle;\
last:;\
   mov %5, %1;\
   mul %4;\
exit:;\
   div %2;\
   cmp $1, %5;\
   jz prime;\
   lea 1(%5), %1;\
   cmp %2, %1;\
   jz prime;\
nexts:;\
   mov %5, %1;\
   mul %1;\
   div %2;\
   lea 1(%5), %1;\
   cmp %2, %1;\
   jz prime;\
   dec %%ebp;\
   jnz nexts;\
   jmp end;\
prime:;\
   movb $49, %0;\
end:;"
      : "=m"(b)
      : "a"(0),"S"(0),"b"(0),"c"(0),"d"(0),"D"(0),"r"(n));

   return b;
}

_________________
Þá skelfur askr Yggdrasils, ok engi hlutr er þá óttalaus á himni eða jörðu.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Michael



Зарегистрирован: 16.04.2008
Сообщения: 5

СообщениеДобавлено: Чт Апр 17, 2008 3:22 pm    Заголовок сообщения: Ответить с цитатой

Круто! Shocked Very Happy

Ну... вроде бы так примерно я и писал
(в смысле синтаксиса, конечно )...
А оно на asm ругалось... Ну я и решил, что не поддерживается Confused

В кавычках, наверное, запутамшись Embarassed Crying or Very sad
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
xaxa3217



Зарегистрирован: 19.04.2008
Сообщения: 2

СообщениеДобавлено: Сб Апр 19, 2008 11:28 am    Заголовок сообщения: Ответить с цитатой

2levlam а что это за хитрая реализация решета такая чтоб за 10 секунд все лишнее отсеять?
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
levlam



Зарегистрирован: 25.01.2007
Сообщения: 11

СообщениеДобавлено: Сб Апр 19, 2008 12:46 pm    Заголовок сообщения: Ответить с цитатой

xaxa3217 писал(а):
2levlam а что это за хитрая реализация решета такая чтоб за 10 секунд все лишнее отсеять?

Я написал решето Эратосфена, которое шло только по остаткам 1, 7, 11, 13, 17, 19, 23 и 29 по модулю 30(как я потом узнал, эта оптимизация называется wheel factorization). Также исследуемый интервал пришлось разбить на более мелкие, чтобы память, используемая непосредственно алгоритмом, помещалась в кеш процессора. Это изменение дало очень существенное ускорение.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
zhengxi



Зарегистрирован: 25.03.2008
Сообщения: 19

СообщениеДобавлено: Сб Апр 19, 2008 9:39 pm    Заголовок сообщения: Ответить с цитатой

кстати, на spoj есть результат больше 200M (4.02сек на все числа)
http://www.spoj.pl/ranks/PRIC/
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Werewolf



Зарегистрирован: 16.03.2007
Сообщения: 28

СообщениеДобавлено: Вс Апр 20, 2008 10:50 am    Заголовок сообщения: Ответить с цитатой

Японцы - маниаки )
_________________
Þá skelfur askr Yggdrasils, ok engi hlutr er þá óttalaus á himni eða jörðu.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Показать сообщения:   
Начать новую тему   Ответить на тему    Список форумов ZCon -> ZCon 2008 Часовой пояс: GMT + 3
Страница 1 из 1

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


Powered by phpBB © 2001, 2005 phpBB Group