Недавно я узнал о числах без квадратов и обнаружил, что можно найти N-е такое число, вычислив функцию Мёбиуса до квадратного корня из N.
Я видел реализацию, но не смог понять процедуру.
Сегмент кода идет как
lb = 1;
ub = 10000000000; //max value of N we can look for
max = sqrt(ub);
while (lb < ub){
long m = (lb+ub)/2;
long thisN = m;
for (i = 2; i < max; i++)
thisN -= mobius[i] * (m / (i*i));
if (thisN < n)
lb = m+1;
else
ub = m;
}
return lb;
куда mobius
массив, который имеет значение функции Мобиуса i
по указателю i
,
Как этот процесс двоичного поиска находит N-е квадратное свободное число из массива? Кроме того, как вычисление функции Мёбиуса до квадратного корня из N позволяет нам найти до N-го такое число?
Задача ещё не решена.
Других решений пока нет …