数学题真的好难啊...证明参考博客 http://blog.csdn.net/guhaiteng/article/details/52400679
费马小定理(百度百科):假如p是质数,且gcd(a,p)=1,那么 a(p-1)≡1(mod p)。即:假如a是整数,p是质数,且a,p互质(即两者只有一个公约数1),那么a的(p-1)次方除以p的余数恒等于1。
<span style="font-size:18px;">#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
typedef long long ll;
const int MOD=1e9+7;
ll pow_mod(ll a,ll b,ll mod)
{
ll res=1;
while(b)
{
if(b&1) res=res*a%mod;
a=a*a%mod;
b>>=1;
}
return res;
}
int main()
{
ll p,k;
scanf("%I64d%I64d",&p,&k);
if(k==0) printf("%I64d\n",pow_mod(p,p-1,MOD));
else if(k==1) printf("%I64d\n",pow_mod(p,p,MOD));
else
{
ll r=1;
while(pow_mod(k,r,p)!=1) r++;
printf("%I64d\n",pow_mod(p,(p-1)/r,MOD));
}
return 0;
}
</span>