View difference between Paste ID: WPTikAFR and H4id0s3w
SHOW: | | - or go back to the newest paste.
1
#include <cstdio>
2
#include <iostream>
3
#include <algorithm>
4
#define ll long long
5
#define N 11111
6
#define P 1000000000
7
using namespace std;
8
9
class bigint{
10
	public:
11
	int sz;
12
	ll a[N];
13
	bigint(ll x=0){
14
		memset(a,0,sizeof(a));
15
		sz=0;
16
		while (x){
17
			a[++sz]=x%P;
18
			x/=P;
19
		}
20
		if (!sz) ++sz;
21
	} 
22
	void print(){
23
		printf("%I64d",a[sz]);
24
		for (int i=sz-1;i>=1;i--) printf("%.9I64d",a[i]);
25
	}
26
	friend ostream& operator << (ostream& output, bigint & q){
27
		q.print();
28
		return output;
29
	}
30
	ll & operator [] (int x){
31
		return a[x];
32
	}
33
	friend bool operator < (bigint & p,bigint &q){
34
		if (p.sz<q.sz) return 1;
35
		if (p.sz>q.sz) return 0;
36
		for (int i=p.sz;i;i--){
37
			if (p[i]>q[i]) return 0;
38
			if (p[i]<q[i]) return 1;
39
		}
40
		return 0;
41
	}
42
	friend bool operator == (bigint & p,bigint & q){
43
			return !(p<q) && !(q<p);
44
	}
45
	friend bool operator != (bigint & p, bigint & q){
46
		return p<q || q<p;
47
	}
48
	friend bool operator >= (bigint & p,bigint & q){
49
		return !(p<q);
50
	}
51
	friend bool operator <= (bigint &p, bigint & q){
52
		return !(q<p);
53
	}
54
	friend bool operator > (bigint &p, bigint & q){
55
		return q>p;
56
	}
57
	friend bigint operator + (bigint &a,bigint &b){
58
		bigint res;
59
		int n=max(a.sz,b.sz);
60
		for (int i=1;i<=n;i++){
61
			res[i]=a[i]+b[i]+res[i];
62
			res[i+1]=res[i]/P;
63
			res[i]%=P;
64
		}
65
		if (res[n+1]) ++n;
66
		res.sz=n;
67
		return res;
68
	}
69
	friend bigint operator * (bigint &a,bigint &b){
70
		bigint res;
71
		int n=a.sz,m=b.sz,k=n+m-1;
72
		for (int i=1;i<=n;i++)
73
			for (int j=1;j<=m;j++){
74
				res[i+j-1]=a[i]*b[j]+res[i+j-1];
75
				res[i+j]+=res[i+j-1]/P;
76
				res[i+j-1]%=P;
77
			}
78
		if (res[k+1]) ++k;
79
		res.sz=k;
80
		return res;
81
	}
82
	friend bigint operator - (bigint &a,bigint &b){
83
		bigint res;
84
		int k=a.sz;
85
		for (int i=1;i<=k;i++){
86
			res[i]+=a[i]-b[i];
87
			if (res[i]<0){
88
				res[i]+=P;
89
				res[i+1]--;
90
			}
91
		}
92
		while (res[k]==0) --k;
93
		res.sz=k;
94
		return res;
95
	}
96
	friend void operator -=(bigint &p,bigint & q){
97
		p=p-q;
98
	}
99
	friend void operator +=(bigint &p,bigint & q){
100
		p=p+q;
101
	}
102
	friend void operator *=(bigint &p, bigint & q){
103
		p=p*q;
104
	}
105
	friend bigint operator ^ (bigint & p, int y){
106
		bigint x=p,res=1;
107
		while (y){
108
			if (y&1) res*=x;
109
			y>>=1;
110
			x*=x;
111
		}
112
		return res; 
113
	}
114
	friend bigint operator ! (bigint & p){
115
		bigint res=1,I;
116
		int n=p[1];
117
		for (int i=1;i<=n;i++){
118
			I=i;
119
			res=res*I;
120
		}
121
		return res;
122
	}
123
	 
124
};
125
126
int main(){
127
	int x,y;
128
	cin>>x>>y;
129
	bigint f1=x;
130
	bigint f=f1^y;
131
	cout<<f1<<"^"<<y<<"="<<f;
132
}