1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51
|
#include <cmath> #include <cstring> #include <cstdlib> #include <iostream> #include <algorithm> #include <queue> #include <stack> #define ll long long using namespace std; ll m,a,c,x0,n,g; ll (ll x,ll y) { ll ans=0; while(y) { if(y%2) ans=(ans+x)%m; x=(x+x)%m; y/=2; } return ans%m; } ll qpow(ll x,ll y) { ll ans=1; while(y) { if(y%2==1) ans=qpow_add(ans,x); x=(ll)qpow_add(x,x)%m; y/=2; } return ans%m; } ll qmul(ll x,ll y) { if(y==1) return (x+1)%m; if(y==0) return 1; if(y%2) return qpow_add((qpow(x,y/2+1)%m+1)%m,qmul(x,y/2)%m)%m; return qpow(x,y)%m+qpow_add((qpow(x,y/2)+1)%m,qmul(x,y/2-1)%m)%m; } int main() { scanf("%lld%lld%lld%lld%lld%lld",&m,&a,&c,&x0,&n,&g); x0%=m; ll a0=qpow(a,n)%m; ll temp1=qpow_add(a0,x0)%m; ll temp2=qpow_add(qmul(a,n-1)%m,c%m)%m; ll ret=(temp1+temp2)%m%g; printf("%lldn",ret); return 0; }
|
近期评论