FZU 1759-Super A ^ B mod C (Fast Power + big integer modulo + Euler's function)
Question link: Click the open link
A ^ B % c is calculated, but B is large and may reach 10 ^ 1000000. Therefore, a ^ B % c = a ^ (B % phi (c) is a power-down formula) + phi (c) % c (B> = phi (c ))
#include #include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define maxn 10100#define _ll __int64#define ll long long#define INF 0x3f3f3f3f#define Mod 1000000007#define pp pair
#define ull unsigned long longusing namespace std;int a,c;char b[1000010];ll phi(ll n){ll m=(ll)sqrt(n+0.5),ans=n;for(ll i=2;i<=m;i++){if(n%i==0){ans=ans/i*(i-1);while(n%i==0)n/=i;}}if(n>1)ans=ans/n*(n-1);return ans;}ll pow_mod(ll a,ll n,ll p){if(n==0)return 1;ll ans=pow_mod(a,n/2,p);ans=ans*ans%p;if(n&1)ans=ans*a%p;return ans;}void solve(){int len=strlen(b);ll tem=phi(c),sb;if(len<=10){sscanf(b,"%I64d",&sb);if(sb>=tem)printf("%I64d\n",pow_mod(a,sb%tem+tem,c));elseprintf("%I64d\n",pow_mod(a,sb,c));return ;}ll ans=0;for(int i=0;i