Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //This code is wrong! Sorry :'(
- #include <bits/stdc++.h>
- using namespace std;
- #define F(W) for(int i(0);i<W;++i)
- #define FF(W) for(int j(0);j<W;++j)
- #define FT(I,W) for(int k(I);k<W;++k)
- #define ZERO (1e-10)
- #define EPS ZERO
- #define INF (1<<30)
- #define LINF (1LL<<60)
- #define NINF (-(1<<30))
- #define MP(A,B) make_pair(A,B)
- #define CL(A,I) (memset(A,I,sizeof(A)))
- #define ADD(A,B,V) (g[A].push_back(B),g[B].push_back(A),v[A].push_back(V),v[B].push_back(V))
- #define add(A,B) (g[A].push_back(B),g[B].push_back(A))
- #define DEB printf("DEB!\n");
- #define DEX printf("DD2!\n");
- #define EQ(A,B) (A+ZERO>B&&A-ZERO<B)
- typedef long long ll;
- typedef pair<ll, ll> pll;
- typedef vector<int> vi;
- typedef pair<int, int> ii;
- #define REP(i, n) for (int i = 0; i < n; i++)
- #define IN(n) int n; cin >> n;
- #define PB push_back
- ll X,A,N,C;
- ll pw(ll n,ll k){
- ll r(1);
- while(k){
- if(k&1)
- r*=n,r%=C;
- n*=n,n%=C;
- k>>=1;
- }
- return r;
- }
- ll gcdE(ll a,ll m,ll &x,ll &y){
- if(!a)return x=0,y=1,m;
- ll u,v,g(gcdE(m%a,a,u,v));
- return x=v-(m/a)*u,y=u,g;
- }
- ll inv(ll a,ll m=C){
- ll x,y,g(gcdE(a,m,x,y));
- return g==1?(x%m+m)%m:-1;
- }
- #define MD(W) ((W)%C)
- ll spec(ll N,ll X,ll A){
- return MD(MD(pw(A,N)*MD(A*(X-1)-X)+A)*inv(A-1));
- }
- int main(void){
- while(scanf("%lld%lld%lld%lld",&X,&A,&N,&C),X)
- printf("%lld\n",spec(N,X,A));
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment