Вы находитесь на странице: 1из 4

Функция Эйлера и ее свойства:

Определение. Функция Эйлера φ ( m ) ставит в соответствие каждому натуральному m количество


чисел, меньших m и взаимно простых с m . Будем полагать, что φ ( 1 )=1.

Свойства:

1. φ ( p )= p−1 , где , p−¿ простое число.


φ ( 2 )=2−1=1 , φ ( 3 )=3−1=2 , φ ( 13 )=13−1=12 …
2. φ ( pn ) ¿ pn− p n−1 , где p−¿ простое число, , n−¿ натуральное число.
φ ( 8 )=φ ( 23 ) =23−23−1=8−4=4
3. φ ( ab )=φ ( a ) φ ( b ) , где a и b – взаимно простые числа.
φ ( 40 )=φ ( 5 ) φ ( 8 )=4∗4=16
4. φ ( pa q b … )=( p a− pa−1 ) ( q b−q b−1 ) (…), где p, q ,… - простые числа, a , b , … ≥ 1
φ ( 36 )=φ ( 32∗22 )=(3 ¿ ¿ 2−32−1 )(22−22−1)=12¿
5. φ ( n )−¿ четное число, если n−¿ натуральное число и n>2 .

Теорема:

Пусть x пробегает полную систему вычетов по модулю a , а y−¿ соответственно по модулю b , при
этом НОД(a , b )=1:

1) z=ay + bx пробегает полную систему вычетов по модулю ab ;


2) НОД( z , ab) = 1 тогда и только тогда, когда НОД( x , a) = 1, НОД( y , b) = 1

Формула Гаусса:

Пусть d пробегает все делители числа m, тогда:

m= ∑ φ ( d )
d ∨m

*Индекс d∨m у знака ∑ ❑означает суммирование по всем делителям m.

∑ φ ( d )=φ ( 1 ) +φ ( 2 ) +φ ( 3 ) + φ ( 5 )+ φ ( 6 ) +φ ( 10 ) +φ ( 15 ) + φ ( 30 )= 1+1+2+4+2+4+8+8=30.
d ∨30

Определение:

f – мультипликативная функция, если:


1) f определена на N и существует a ∈ N , такой что f ( a ) ≠ 0 ;
2)
для любых взаимно простых натуральных чисел a 1 и a2 выполняется f ( a1 a2 )=f ( a1 ) f ( a2 ) .

Таким образом, функция Эйлера – мультипликативная функция. Рассмотрим еще одну


мультипликативную функцию, применяемую в теории чисел и комбинаторике.

Определение:

Функция Мебиуса μ ( m ) определяется следующим образом:

1) μ ( 1 )=1
a1 a2 ai
2) Пусть число m∈ N представлено в виде: m= p1 p2 … p k , a i ≥ 1, i∈ 1: k .
Тогда
0 , если max { ai } >1 ,
μ ( m )=
{ k
i∈1:k

(−1 ) в противном случае

3
μ ( 30 )=μ ( 2∗3∗5 ) =(−1 ) =−1 ; μ ( 60 )=μ ( 22∗3∗5 ) =0
Тождество:

0 , если m≥ 2
∑ μ ( d )={1в протвином случае
d ∨m

Теорема Эйлера-Ферма:

Пусть НОД(a , m )=1, тогда a φ ( m) ≡ 1 mod m.

Следствие (малая теорема Ферма):

Если p – простое, то a p ≡ a mod p

Свойство:

( a+ b ) p ≡ ( a+b ) mod p , a p ≡ a mod p ,b p ≡ b mod p .


Алгоритм быстрого возведения в степень в кольце вычетов:

Для решения задач по поиску остатка от деления одного числа на другое может понадобиться
алгоритм быстрого возведения в степень в кольце вычетов:

x n mod a
Пусть n=( m k m k−1 … m 1 m 0 )2−двочиное представление степени n

Тогда x n=¿

Последовательность действий при использовании данной схемы можно описать так:

1. Представить показатель степени n в двоичном виде

2. Если m i= 1, то текущий результат умножается на x, возводится в квадрат и в конце берется


его остаток от деления на a . Если m i= 0, то текущий результат просто возводится в квадрат.
Индекс i изменяется от k-1 до 0.

Пример: Вычислим 43 25 mod 58.

2510=11001 2

m0=1 , m1=0 , m2=0 , m3 =1 ,m4 =1.


2 2 2 2 2
(( 2
) ) ( 2
)
43 25 mod 58= (( 431 ) ∗431 ) ∗430 ∗430 ∗431 mod 58= ( ( ( 1849 mod 58 )∗431 ) ∗430 ) ∗43 0 ∗431 mod 58= ((
Нахождение остатка от деления числа на число:
137
Найти остаток от деления 3143 на 59.

1. По теореме Ферма т.к. 31 и 59 – взаимно простые числа ¿>3158 ≡1 mod 59.


2. Найдем остаток от деления 43 137 на φ ( 59 )=58 , по теореме Ферма, т.к. 43 и 58 – взаимно
простые числа, 43 28 ≡1 mod 58=¿ 43112∗4325 mod 58=4325 mod 58.
3. Воспользуемся алгоритмом быстрого возведения в степень в кольце вычетов 58 для числа
43 25 : 43 25 mod 58=21 mod58
4. Перепишем исходное условие, теперь необходимо найти остаток от деления 3121 на 59,
для этого также воспользуемся алгоритмом быстрого возведения в степень в кольце
вычетов 59 для числа 3121 : 3121 mod 59=18 , это и есть ответ.

Задача на программирование (просто):

m
Дробь называется несократимой , если0< m< n и НОД ( m , n )=1. Найдите количество правильны
n
Входные данные :n
Код чтобы создать тесты:
#include <iostream>
using namespace std;
 
int main () {
        int n, k;
        while (cin >> n and n!=0) {
                k = n;
                for (int i = 2; i*i <= n; i++) {
                        if (n % i == 0) {
                                while (n % i == 0) {
                                        n/= i;
                }
                                k-=k/i;
            }
        }
                if (n > 1) {
                        k-=k/n;
        }
                cout << k << endl;
    }
        return 0;   
}

Задача с произвольным ответом:


137
Найти остаток от деления 47 77 на 51

Ответ: 47

Задача с произвольным ответом:

Найдите наименьшее целое число a>0, для которых число  a1337 + 1  делится на 10.

Ответ: 9

Задача на соответствие:
1)φ ( 5 x )=500 a) Нет решений

2)φ ( 6 x )=30 b) x=4

3)φ ( 6 x )=72 c) x=3

4)φ ( 4 x )=8 d) x=2

Bacd

Задача на программирование:

Реализовать алгоритм быстрого возведения в степень в кольце вычетов. На вход подается


основание степени, показатель степени и в каком кольце вычетов происходит действие.

Вам также может понравиться