Сейчас вы делаете это при помощи функции factor() которая производит факторизацию полностью
Нет, сейчас это делается
factor(x,2^15) и анализом что она вернула. Если делителей больше n, то кортеж отбрасываем. Если длина вектора ровно n и последнее число составное - кортеж отбрасываем (делителей точно больше n). Если длина n и последнее число простое - ок, разложение завершено. Иначе продолжаем проверку других чисел (мест кортежа).
Всего или простых? numdiv() или omega() ?
Вообще говоря всего, numdiv().
Но раз уж ограничиваемся только первыми степенями, то одно пересчитывается в другое: numdiv(x)=2^omefa(x).
На вход подаётся 17 чисел.
Хм, я говорил про замену лишь numdiv() или factor(), без списка чисел ...
wrestОК, пусть будет вектор чисел и требуемое число делителей (хоть простых, хоть всего, лучше таки второе для универсальности). Типа isnumdivs([],n)={0,1}.
Возвращать можно просто флаг что все они имеют ровно столько делителей (и 0 в любом другом случае). Максимально быстро. Оптимизировать по скорости возврата 0, не 1.
Но это на порядок сложнее модификации лишь factor() или numdiv().
-- 29.11.2025, 23:09 --Или даже такую: isnumdiv_2_4_8_16([], [], [], []) - вектора для 2,4,8,16 делителей (могут быть и пустыми).