Blue Bridge Cup Algoritmo necesario 1: Función de Euler

Principio de función de Euler

Primero, la introducción de la función de Euler.

Considere las siguientes preguntas:
Dado cualquier entero positivo n, ¿cuántos enteros positivos menores o iguales a n forman una relación coprima con n?
(Por ejemplo, del 1 al 8, ¿cuántos números son coprimos con el 8?)

La forma de calcular este valor se denomina función de Euler, denotada por φ(n). Entre 1 y 8, 1, 3, 5 y 7 forman una relación coprima con 8, por lo que φ(n) = 4.

En segundo lugar, la definición de la función de Euler

  • Definición: La función de Euler φ(n) es una función definida sobre el conjunto de enteros positivos.El valor de φ(n) es igual al número de números que son primos relativos a n en la secuencia 0, 1, 2, . .., n-1.

En particular, φ(1)=1 (un número que es primo relativo a 1 (menor o igual a 1) es 1 mismo).

3. Propiedades de las funciones de Euler

  1. Cuando p es primo, φ§=p-1.
  2. La función de Euler es una función integral, pero no una función completamente integral.
  3. Si y solo si n se puede descomponer en el producto de dos números primos relativos, n = p1 × p2, entonces φ(n) = φ(p1p2) = φ(p1)φ(p2).
    En particular, para dos números primos p,q, φ(pq)=(p-1)(q-1). (Aplicación del algoritmo RSA)
    Cuando n>2, φ(n) son todos números pares, es decir, φ(n)≡0 (mod2).
    Demostración sencilla, porque si n es la k-ésima potencia del número primo p, φ(n)=pk-pk-1=(p-1)pk-1
    Cuando p es 2, pk-1 debe ser par;
    cuando p>2 , (p-1) debe ser par.

En cuarto lugar, el método de cálculo de la función de Euler.

(1) Ideas para resolver problemas

Para la descomposición en potencias primas de un entero positivo N, N=P1q1P2q2…Pnqn, donde Pi es un número primo (1≤i≤n).
De acuerdo con la segunda propiedad, obtenemos:

φ (N) = φ (P1q1P2q2… Pnqn) = φ (P1q) φ (P2q2)… φ (Pnqn)

Nota: Solo hay uno de cada factor primo.
Si n es la k-ésima potencia del número primo p, φ(n)=pk-pk-1=(p-1)pk-1, porque a excepción de los múltiplos de p, otros números son primos relativos a n.
Prueba simple: φ(n)=pk-pk-1=(p-1)pk-1

Prueba:
Por el valor definido de φ(n), φ(pk) es igual a restar de pk el número de números en 1, . . . , pk que no son coprimos con p. Dado que p es primo, φ(pk) es igual a restar de pk el número de números divisibles por p en 1,...,pk. En
1,...,p,p+1,...,2p,...,pa-1*p
, es fácil saber que hay pa-1 múltiplos de p, es decir, φ(n )=pk-pk-1=( p-1)pk-1

(2) Cálculo de programación

Usando la relación entre la función de Euler y sus propios factores no primos, el método de tamiz se usa para calcular el valor de la función de Euler de todos los números dentro de un cierto rango.
La relación entre la función de Euler y sus propios factores no primos:

欧拉函数: φ(N)=N{
    
    ∏p|N}(1-1/p)
亦即:
φ ( N ) = N ∗ ∏ ( 11 / p ) ( P 是 数 N 的 质 因 数 ) φ(N)=N*(1-1/p)(P是数N的质因数)

φ(N)=N∗∏(1−1/p) (P es el factor primo del número N), como:

φ(10=10×(11/2)×(11/5=410的质因数为25;
φ(30=30×(11/2)×(11/3)×(11/5=830的质因数为235;
φ(49=49×(11/7=4249的质因数为7

Cinco, expansión de la función de Euler

Si n≥1, entonces ∑φ(n)=n, donde d|n, d>0.

inserte la descripción de la imagen aquí

Seis, la aplicación de la función de Euler

Tema Descripción

inserte la descripción de la imagen aquí
Ejemplo de entrada y salida de preguntas

输入样例:
2
7 5
10 2
输出样例:
1
4

Ideas y códigos de temas

Idea: La función f(n) es la definición de la función de Euler, y la función g(n) es la aplicación del teorema de la extensión de la función de Euler, por lo que solo necesita calcular
el código central del tamiz de números primos:

void pri(ll N){
    
    
    for(int i=2;i<=N;i++){
    
    
        if(!vis[i]){
    
    
            p[++tot]=i;
            vis[i]=1;
        }
        for(int j=1;j<=tot&&i*p[j]<=N;j++){
    
    
            vis[i*p[j]]=1;
            if(i%p[j]==0){
    
    
                break;
            }
        }
    }
}

Código:

#include<bits/stdc++.h>
using namespace std;
typedef long long int ll;
const ll maxn=1e5+10;
const ll maxm=1e8+10;
const ll mod=1e9+7;
ll n,k;
ll p[maxn];
ll vis[maxn];
ll tot;
void pri(ll N){
    
    
    for(int i=2;i<=N;i++){
    
    
        if(!vis[i]){
    
    
            p[++tot]=i;
            vis[i]=1;
        }
        for(int j=1;j<=tot&&i*p[j]<=N;j++){
    
    
            vis[i*p[j]]=1;
            if(i%p[j]==0){
    
    
                break;
            }
        }
    }
}
ll ppi(ll x){
    
    
    ll ans=x;
    for(int i=1;i<=tot;i++){
    
    
        if(x%p[i]){
    
    
            continue;
        }
        ans=ans/p[i]*(p[i]-1);
        while(x%p[i]==0){
    
    
            x/=p[i];
        }
    }
    if(x>1){
    
    
        ans=ans/x*(x-1);
    }

    return ans;
}
int main(){
    
    
    pri(maxn-1);
    ll t;
    scanf("%lld",&t);
    while(t--){
    
    
            scanf("%lld%lld",&n,&k);
            k=(k+1)/2;
            for(int i=1;i<=k&&n>1;i++){
    
    
                n=ppi(n);
            }
            printf("%lld\n",n%mod);

    }
	return 0;
}

recomendar a todo el mundo


"Si estás indeciso, puedes preguntarle a la brisa primaveral, y si la brisa primaveral no habla, seguirás a tu corazón" significa: si tienes dudas sobre algo, pregúntale a la brisa primaveral cómo hacerlo. . "Si no está decidido, puede preguntarle a la brisa primaveral. Si la brisa primaveral no habla, seguirá su corazón". La oración proviene del "Jianlai" escrito por el escritor de Internet "Fenghuo Opera Princes". El texto original es: "Si estás indeciso, puedes preguntarle a la brisa primaveral. Sigue tu corazón".

inserte la descripción de la imagen aquí


Supongo que te gusta

Origin blog.csdn.net/weixin_46627433/article/details/123489489
Recomendado
Clasificación