|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
18.03.2011, 11:33 | #1 |
Пользователь
Регистрация: 19.10.2010
Сообщений: 80
|
Деление
Привет!!!
Есть ли какой-нибудь алгоритм, чтобы определить сколько чисел в диапазоне не делятся ни на одно из данных чисел( чисел группы )? (Диапазон всегда от 1); Нужно чтобы он был быстрый, так как в худшем случае таких групп чисел может быть около 30000 и в каждой группе до 800 чисел. Диапазон до 10000000 или больше. Нужно легко уложиться в 2 секунды. Реализация или на Delphi или математически. Перебор не нужен. Жду. Заранее спасибо!! |
18.03.2011, 11:37 | #2 |
Форумчанин
Регистрация: 12.02.2007
Сообщений: 360
|
Сильно сомневаюсь. Единственное подобное, что в голову приходит - это решето Эратосфена
|
18.03.2011, 12:22 | #3 |
Пользователь
Регистрация: 13.08.2008
Сообщений: 76
|
Создаете массив булевых по величине диапазона.
Потом закрываете с шагом равным n-ному элементам группы значением true. (напр. каждый 11-й, каждый 14...) Может так? + проверка дубляжей элементов в группах. Булевый массив - это быстро false-true. А основная нагрузка - найти дубляжи в группах Последний раз редактировалось Turbine; 18.03.2011 в 12:24. |
18.03.2011, 12:29 | #4 |
Пользователь
Регистрация: 13.08.2008
Сообщений: 76
|
А если есть 1, то досрочно пишем "Bingo!"
|
18.03.2011, 13:47 | #5 | |
Старожил
Регистрация: 20.04.2008
Сообщений: 5,526
|
Цитата:
есть число M (группа из одного числа). узнать сколько чисел от 1 до N не делятся на M. я правильно понял задачу (для группы из одного числа)? представим диапазон 1..N в виде двух диапазнонов [1..M] [M+1 ... N=M*k+r] [1..M] [M+1..M*2]..[M*k..M*k+r] считаем число нужных символов в каждом. есть два числа M1 и М2 узнать с сколько чисел от 1 до N не делятся ни на M1 ни на М2. [1..НОК(M1,M2)] .. и далее аналогично случаю с одним числом.
программа — запись алгоритма на языке понятном транслятору
|
|
18.03.2011, 14:26 | #6 |
Пользователь
Регистрация: 19.10.2010
Сообщений: 80
|
Не совсем так. Но НОК и НОД не подходят - чисел слишком много. Идея с булевым массивом мне понравилась больше, но все равно дольше лимита.
|
18.03.2011, 15:30 | #7 |
Старожил
Регистрация: 31.05.2010
Сообщений: 13,543
|
Я так понимаю, эти числа заносятся не в ручную, а при помощи какого-то устройства по сбору данных?
Если так, то возникают вопросы: - какова разрядность этого числа? - какова скорость потока чисел? Ответьте на них пожалуйста.
Пиши пьяным, редактируй трезвым.
Справочник по алгоритмам С++ Builder |
18.03.2011, 18:35 | #8 |
Пользователь
Регистрация: 19.10.2010
Сообщений: 80
|
Тестирует сервер, подробностей не знаю. А зачем?
|
19.03.2011, 18:56 | #9 |
Старожил
Регистрация: 20.04.2008
Сообщений: 5,526
|
переходим в систему счисления построенную на коэффициентах простых множителей.
M =2^k1 * 3^k2 * 5^k3 * .... (разложение на простые) строим таблицу коэфф для всех чисел группы. M1-> K1[] M2-> K2[] ..... 1. M2 делится на M1 <=> k2[i]<=k1[i] для всех i 2. M1 делится на M2 <=> k2[i]>=K1[i] для всех i 3. M1 M2 взаимно просты <=> есть i такое что K2[i]>K1[i] нарушено условие 1. и есть j такое что K2[j]<K1[j] нарушено условие 2.
программа — запись алгоритма на языке понятном транслятору
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Деление | 0479 | Общие вопросы по Java, Java SE, Kotlin | 1 | 08.11.2010 00:37 |
Деление в C++ | Bumbuk | Помощь студентам | 5 | 24.06.2010 02:06 |
Деление в С++ | Tanilita | Общие вопросы C/C++ | 5 | 26.02.2010 17:28 |
Деление | |{ot | Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM | 4 | 24.03.2009 01:50 |
деление | natasha | Общие вопросы Delphi | 6 | 22.01.2007 12:39 |