Как известно, функция Эйлера ищет количество взаимно простых чисел с N на отрезке [1..N]. Мне же необходим поиск взаимно простых чисел с N на отрезке 1..K, где K <= N. Если такое можно сделать, то возьмите за исходник вот этот код:
long EilerF(long n)
{
long result = n;
for (long i=2; i*i<=n; ++i)
if (n % i == 0)
{
while (n % i == 0)
n /= i;
result -= result / i;
}
if (n > 1)
result -= result / n;
return result;
}
Собственно это не такая простая задача как кажется. Количество чисел взаимно простых с n из отрезка [1..k] выражается формулой
m(d) это функция Мебиуса Вот здесь показано как ее вычислить. https://www.geeksforgeeks.org/program-mobius-function/
Второй множитель это функция "пол". Ближайшее снизу целое для вещественного числа floor(1.5)=1, floor (1.1)=1.
Собственно нужно пройти по всем делителям числа N и подсчитать указанную сумму. Из функции Эйлера это не получится.
Продвижение своими сайтами как стратегия роста и независимости