imho.ws
IMHO.WS  

Вернуться   IMHO.WS > Компьютеры > Программирование
Опции темы
Старый 12.03.2005, 19:16     # 1
wk-cof
Junior Member
 
Аватар для wk-cof
 
Регистрация: 27.12.2003
Адрес: не дом и не улица
Сообщения: 80

wk-cof Путь к славе только начался
Post Vzaimno prostie chisla!!!

Kak naiti chislo vzaimno prostih chisel s H<10^12 i kolichestvo delitelei H???
__________________
И тебя вылечат...
wk-cof вне форума  
Старый 18.03.2005, 14:32     # 2
Lord Skill
Member
 
Аватар для Lord Skill
 
Регистрация: 29.10.2002
Адрес: Estonia
Сообщения: 270

Lord Skill Путь к славе только начался
перебором
__________________
Lord Skill вне форума  
Старый 20.03.2005, 13:03     # 3
wk-cof
Junior Member
 
Аватар для wk-cof
 
Регистрация: 27.12.2003
Адрес: не дом и не улица
Сообщения: 80

wk-cof Путь к славе только начался
издеваешься??? 10^12 степень - перебором ты ее до старости вселенной делать будешь... Алгоритмы какие - нить кто - нить знает???
__________________
И тебя вылечат...
wk-cof вне форума  
Старый 21.03.2005, 12:10     # 4
moron
Guest
 
Сообщения: n/a

ну составь один раз таблицу простых чисел <10**12
а в дальнейшем на ее основе строй алгоритмы
 
Старый 21.03.2005, 13:37     # 5
wk-cof
Junior Member
 
Аватар для wk-cof
 
Регистрация: 27.12.2003
Адрес: не дом и не улица
Сообщения: 80

wk-cof Путь к славе только начался
Хм... Даже если на 1000 обычных чисел приходится 1 простое, то таблица будет содержать 10^12 / 1000 = 1000000000 миллион чисел. А алгоритма нахождения следующего простого числа еще никто не придумал. Есть решето Эратосфена и еще несколько методов, но все они основаны на последовательном исключении НЕ простых чисел.
А способ узнать число взаимнопростых я уже нашел - функция Эйлера.
С числом простых делителей сложнее...
__________________
И тебя вылечат...
wk-cof вне форума  
Старый 21.03.2005, 13:56     # 6
Ghost
::VIP::
Звезда первого сезона
Молчун-2004
 
Аватар для Ghost
 
Регистрация: 24.08.2002
Сообщения: 1 575

Ghost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех Гуру
Для начала, хочешь - не хочешь, придется разложить число H на простые множители. После этого задача сводится к следующему: найти количество чисел меньших H, неделящихся ни на один из этих множителей. Решение этой задачи можно найти в книге "Ф.А.Новиков ДИСКРЕТНАЯ МАТЕМАТИКА ДЛЯ ПРОГРАММИСТОВ" (см. аттач).
Изображения
Тип файла: jpg novikov.jpg (46.6 Кбайт, 19 просмотров - Кто скачивал? )
__________________
Действовать надо тупо и это лучшее доказательство нашей чистоты и силы!
Ghost вне форума  
Старый 21.03.2005, 15:44     # 7
moron
Guest
 
Сообщения: n/a

Для нахождения простых делителей H<10**12 достаточно иметь таблицу всех простых <10**6 (Это существенно, т.к. время работы возрастает экспоненциально, если мне не изменяет память!)
Программка на питоне за полчаса выдала мне все простые числа до 1000000. Надо? (Программку, список простых чисел.)
Далее, перебирая все делители меньшие корня квадратного из H, находишь все его простые делители (предварительно проверив, а не является ли H само по себе простым).
А дальше уточняешь задание.
 
Старый 21.03.2005, 18:43     # 8
Drakosha
Full Member
 
Аватар для Drakosha
 
Регистрация: 16.10.2002
Адрес: ArchLinux, Internet
Сообщения: 557

Drakosha Реально крут(а)Drakosha Реально крут(а)Drakosha Реально крут(а)Drakosha Реально крут(а)
можеш уточнить насчет количетва делителей - что точно надо?
Drakosha вне форума  
Старый 21.03.2005, 22:31     # 9
Hex0gen
Newbie
 
Регистрация: 24.09.2004
Сообщения: 42

Hex0gen Известность не заставит себя ждать
wk-cof:
Найти число чисел, взаимно простых с N при небольшом числе N - это достаточно простая задача.
Есть, так называемая, Функция Эйлера. Функция Эйлера от числа N численно равна числу чисел меньших N и взаимно простых с N.

Если известно разложение числа N на простые множители, то Функция Эйлера вычисляется за полиномиальное время.

Итак, тебе нужно:
1. Найти разложение числа N на простые множители! Алгоритмов масса (ро-эвристика Полларда, квадратичное решето). Но, поскольку число N - мало (~10^12), то для простоты можно обойтись простым перебором (надо совершить всего ~10^6 делений).

2. Пусть N = (p1^e1)*(p2^e2)*...*(pk^ek), где p1, p2, ... , pk - простые числа.
Число чисел меньших N и взаимно простых с N равно:
F(N) = (p1^e1 - p1^(e1-1))*(p2^e2 - p2^(e2-1))*..*(pk^ek - pk^(ek-1))

Я тут маленькую программку написал, которая вычисляет Функцию Эйлера, если хочешь, коды кину.

Алгоритм вычисления Функции Эйлера прикладываю (:
Изображения
Тип файла: gif algorithm.gif (7.6 Кбайт, 12 просмотров - Кто скачивал? )

Последний раз редактировалось Hex0gen; 21.03.2005 в 22:34.
Hex0gen вне форума  
Старый 23.03.2005, 10:19     # 10
wk-cof
Junior Member
 
Аватар для wk-cof
 
Регистрация: 27.12.2003
Адрес: не дом и не улица
Сообщения: 80

wk-cof Путь к славе только начался
to Hex0gen:
Спасибо, но я уже и сам это понял.

to moron:
А с простыми делителями - есть другой способ:Есть N<=10**12 сначала возьмем цифру 2. Если N на нее делится - делим его и проверяем снова, и так далее пока нацело оно на 2 делится уже не будет. берем следующую цифру, проверяем делимость. Смысл в том, что следующее число, на которое будет делиться N - простое. и так далее до N/2, или пока N не станет = 1. Махсимум(если число N - простое) нам прийдется сделат 10**6 - 1 операцию, а это для современной машины это не проблема.
Метод, показанный здесь имеет ту же основу, что и решето, но не требует создания огромного массива с простыми числами.
__________________
И тебя вылечат...
wk-cof вне форума  


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

BB код Вкл.
Смайлы Вкл.
[IMG] код Выкл.
HTML код Выкл.

Быстрый переход


Часовой пояс GMT +4, время: 05:12.




Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.