ab =
① ab ,b< p
②ab%∮( p )+∮( p ), b >= p
本题利用知识点:
欧拉降幂(指数>= Mod 的情况)
快速幂
递归
#include<iostream>
#include<cstdlib>
#include<cstdio>
#define ll long long
using namespace std;
ll qpow(ll a, ll n, ll Mod)
{
ll ret = 1;
while(n)
{
if(n%2)ret = ret*a%Mod;
a = a*a%Mod;
n/=2;
}
return ret;
}
ll phi(ll p)
{
ll ret = p;
for( ll i = 2; i*i <= p; i++)
{
if(p %i == 0)
{
ret = ret*(i-1)/i;
while(p%i == 0)p/=i;
}
}
if(p > 1)ret = ret*(p-1)/p;
return ret;
}
ll solve(ll a, ll Mod)
{
if(Mod == 1)return 0;// 剪枝部分 任何数对1取模为 0
if(a == 1)return 1%Mod;/* */
if(a == 2)return 2%Mod;/* */
if(a == 3)return 9%Mod;/******/
if(a == 4)return qpow(4ll, 9ll, Mod);/******因为只是利用欧拉降幂 指数 >= Mod的情况, 根据题意Mod<= 1e9 所以在a == 1~4情况, 降幂公式可能失效******/
ll ph = phi(Mod);
return qpow(a, ph+solve(a-1,ph), Mod);// 利用欧拉降幂指数 大于 >= Mod的情况, 并且根据题意 进行可以进行递归递归
}
int main()
{
ll n, p;
while( cin>>n>>p)
{
cout<< solve(n, p)<<endl;
}
return 0;
}