L'elevamento a potenza — è un'operazione matematica, indicata come x^n, che coinvolge due numeri: la base e l'esponente . Se — è un numero naturale, allora l'operazione di elevamento a potenza si riduce alla moltiplicazione successiva della base per se stessa: x^n — è il prodotto di fattori, ciascuno dei quali è uguale a : x^n = x \cdot x \cdot ... \cdot x.
Come calcolare x^n dati e ? Si può utilizzare un semplice ciclo con complessità . L'algoritmo lineare rientrerà nei tempi, poiché n \le 10^7.
Si può anche utilizzare l'elevamento a potenza veloce:
Implementazione dell'algoritmo
Utilizziamo il tipo intero a bit long long. Leggiamo i dati di input.
scanf("%lld %lld %lld",&x,&n,&m);Calcoliamo il valore di x^n~mod~m tramite un ciclo.
res = 1;
for (i = 1; i <= n; i++)
res = (res * x) % m;Stampiamo la risposta.
printf("%lld\n",res);Implementazione tramite elevamento a potenza veloce
La funzione PowMod calcola il valore dell'espressione x^n~mod~m.
long long PowMod(long long x, long long n, long long m)
{
if (n == 0) return 1;
if (n % 2 == 0) return PowMod((x * x) % m, n / 2, m);
return (x * PowMod(x, n - 1, m)) % m;
}Parte principale del programma. Leggiamo i dati di input.
scanf("%lld %lld %lld",&x,&n,&m);Calcoliamo e stampiamo la risposta.
res = PowMod(x,n,m);
printf("%lld\n",res);Implementazione Java — complessità lineare
import java.util.*;
public class Main
{
public static void main(String[] args)
{
Scanner con = new Scanner(System.in);
long x = con.nextLong(),
n = con.nextLong(),
m = con.nextLong();
long res = 1;
for (int i = 1; i <= n; i++) res = (res * x) % m;
System.out.println(res);
con.close();
}
}Implementazione Java — O(log2n)
import java.util.*;
public class Main
{
static long PowMod(long x, long n, long m)
{
if (n == 0) return 1;
if (n % 2 == 0) return PowMod((x * x) % m, n / 2, m);
return (x * PowMod(x, n - 1, m)) % m;
}
public static void main(String[] args)
{
Scanner con = new Scanner(System.in);
long x = con.nextLong();
long n = con.nextLong();
long m = con.nextLong();
long res = PowMod(x,n,m);
System.out.println(res);
con.close();
}
}Implementazione Java — powMod
import java.util.*;
import java.math.*;
public class Main
{
public static void main(String[] args)
{
Scanner con = new Scanner(System.in);
BigInteger x = con.nextBigInteger();
BigInteger n = con.nextBigInteger();
BigInteger m = con.nextBigInteger();
System.out.println(x.modPow(n,m));
con.close();
}
}Implementazione Python — pow
Leggiamo i dati di input.
x, n, m = map(int, input().split())Calcoliamo e stampiamo la risposta. Utilizziamo la funzione integrata pow per calcolare l'espressione x^n~mod~m.
print(pow(x, n, m))Implementazione Python — ciclo
Leggiamo i dati di input.
x, n, m = map(int, input().split())Calcoliamo il valore di x^n~mod~m tramite un ciclo.
res = 1
for i in range(1, n + 1):
res = (res * x) % mStampiamo la risposta.
print(res)