Ardıcıllığın ilk hədlərini a_1 vasitəsilə ifadə edək:
a_2 = a_1^2~mod~10000,
a_3 = a_2^2~mod~10000 = a_1^4~mod~10000,
a_4 = a_3^2~mod~10000 = a_2^4~mod~10000 = a_1^8~mod~10000
Beləliklə, düsturu aşağıdakı şəkildə yazmaq olar:
Buradan belə nəticə çıxır ki, a_n-i hesablamaq üçün a_1-i 2^{n - 1} dərəcəsinə modulu ilə qaldırmaq kifayətdir:
Nəzərə alsaq ki,
nəticəsini əldə etmək üçün aşağıdakı hesablamaları yerinə yetirmək lazımdır:
x = 2^{n - 1}~mod~ \phi (10000) = 2^{n - 1}~mod~4000 qiymətini hesablamaq,
Sonra res = a_1^x~mod~10000 hesablamaq
Alqoritmin realizasiyası
PowMod funksiyası x^n~mod~m qiymətini hesablayır.
int PowMod(int x, int n, int 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;
}Giriş məlumatlarını oxuyuruq.
scanf("%d %d",\u0026a,\u0026n);x = 2^{n - 1}~mod~4000 hesablayırıq. Bundan sonra cavabı tapıb çap edirik:
x = PowMod(2,n-1,4000);
res = PowMod(a,x,10000);
printf("%d\n",res);Java realizasiyası
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 a = con.nextLong();
long n = con.nextLong();
long x = PowMod(2,n-1,4000);
long res = PowMod(a,x,10000);
System.out.println(res);
con.close();
}
}