Можно ли сделать модификацию функции Эйлера?

95
31 мая 2021, 00:20

Как известно, функция Эйлера ищет количество взаимно простых чисел с 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;
}
Answer 1

Собственно это не такая простая задача как кажется. Количество чисел взаимно простых с n из отрезка [1..k] выражается формулой

m(d) это функция Мебиуса Вот здесь показано как ее вычислить. https://www.geeksforgeeks.org/program-mobius-function/

Второй множитель это функция "пол". Ближайшее снизу целое для вещественного числа floor(1.5)=1, floor (1.1)=1.

Собственно нужно пройти по всем делителям числа N и подсчитать указанную сумму. Из функции Эйлера это не получится.

READ ALSO
QMediaPlayer / задержка перед воспроизведением

QMediaPlayer / задержка перед воспроизведением

Занялся написанием небольшой игрушки и вот добравшись до музыкально-звуковой составляющий столкнулся с проблемой

107
Как вызвать 2 раза break; внутри switch?

Как вызвать 2 раза break; внутри switch?

Не могу красиво выйти из цикла используя break внутри switch, успевает сработать только один разпробовал еще return; но он выкидывает в такую далину...

104
При работе перепоняется vector: &ldquo;vector subscript out of range&rdquo;

При работе перепоняется vector: “vector subscript out of range”

Около месяца изучаю C++, несколько дней пытаюсь отладить кодОшибка, наверное, очевидная для бывалых, всё никак не находится

89
Вывод значения переменной из функции

Вывод значения переменной из функции

Хочу, чтобы выводилось значение переменной aЕсли введенное число больше 5 - вывести 5, иначе 4

80