Qüvvətə yüksəltmə — x^n kimi işarə olunan riyazi əməliyyatdır və iki ədədi əhatə edir: əsas və qüvvət göstəricisi . Əgər natural ədəddirsə, qüvvətə yüksəltmə əməliyyatı əsasın özü ilə ardıcıl vurulmasına gətirilir: x^n — hər biri -ə bərabər olan vuruğun hasilidir: x^n = x \cdot x \cdot ... \cdot x.
Verilmiş və üçün x^n necə hesablanır? Mürəkkəbliyi olan bir dövrdən istifadə etmək olar. Xətti alqoritm vaxt baxımından keçəcək, çünki n \le 10^7.
Eyni zamanda sürətli qüvvətə yüksəltmədən də istifadə etmək olar:
Alqoritmin realizasiyası
bitlik tam ədəd tipi long long-dan istifadə edəcəyik. Giriş məlumatlarını oxuyuruq.
scanf("%lld %lld %lld",&x,&n,&m);x^n~mod~m dəyərini dövr vasitəsilə hesablayırıq.
res = 1;
for (i = 1; i <= n; i++)
res = (res * x) % m;Cavabı çıxarırıq.
printf("%lld\n",res);Sürətli qüvvətə yüksəltmə vasitəsilə realizasiya
PowMod funksiyası x^n~mod~m ifadəsinin dəyərini hesablayır.
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;
}Proqramın əsas hissəsi. Giriş məlumatlarını oxuyuruq.
scanf("%lld %lld %lld",&x,&n,&m);Cavabı hesablayır və çıxarırıq.
res = PowMod(x,n,m);
printf("%lld\n",res);Java realizasiyası — xətti mürəkkəblik
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();
}
}Java realizasiyası — 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();
}
}Java realizasiyası — 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();
}
}Python realizasiyası — pow
Giriş məlumatlarını oxuyuruq.
x, n, m = map(int, input().split())Cavabı hesablayır və çıxarırıq. x^n~mod~m ifadəsini hesablamaq üçün daxili pow funksiyasından istifadə edirik.
print(pow(x, n, m))Python realizasiyası — dövr
Giriş məlumatlarını oxuyuruq.
x, n, m = map(int, input().split())x^n~mod~m dəyərini dövr vasitəsilə hesablayırıq.
res = 1
for i in range(1, n + 1):
res = (res * x) % mCavabı çıxarırıq.
print(res)