Частота встречаемости делителей чисел

273
06 февраля 2019, 06:00

Как наиболее быстро найти частоту встречаемости делителей у последовательности чисел (кроме делителя 1)? Например, для чисел 4,7,10,12 результатом должно быть 2 - 3, 3 - 1, 4 - 2, 5 - 1, 6 - 1, 7 - 1, 10 - 1, 12 - 1. Находить делители каждого числа, а потом подсчитывать сколько раз они встречаются, - слишком медленно (судя по профайлу).

Answer 1

Альтернативная идея: На каждой итерации сначала находить только простые делители каждого числа (которых будет сильно меньше, чем вообще делителей). Затем делить число на произведение найденных простых делителей. Затем снова искать какие из простых чисел найденных на предыдущем этапе являются делителями оставшегося числа. Повторять пока число не сойдет на нет. Таким образом у нас будет пачка массивов с простыми делителями, причем в каждом следующем массиве некоторые могут повторяться. На основе этих массивов попарным перемножением генерируем все делители.

READ ALSO
Использования hexidecimal в коде

Использования hexidecimal в коде

Какой особый смысл в том, чтобы использовать hexidecimal, для определения значения переменных?

238
есть ли различия в подчёркиваниях? если да, то какие?

есть ли различия в подчёркиваниях? если да, то какие?

в чём различие в __cdecl и _cdecl или __fastcall и _fastcall или __asm и _asm и тд?

297
ошибка при чтении файла getline [c++] MS VS2010 [закрыт]

ошибка при чтении файла getline [c++] MS VS2010 [закрыт]

Появляется ошибка при чтении файла на getline в MS VS2010 появляется ошибка на while( ingetline(buf, 1024) ){ при чтении пустой строки, а именно при чтении символов...

276
std::conditional параметр в конструкторе

std::conditional параметр в конструкторе

Пытаюсь написать класс, реализующий одновременно константный и неконстантый итератор как показано здесь

240