fork download
  1. #include <bits/stdc++.h>
  2.  
  3. using namespace std;
  4.  
  5. typedef int64_t ll;
  6. typedef pair<ll,ll> lll;
  7. typedef pair<ll,int> lli;
  8. typedef pair<int,int> ii;
  9.  
  10. #define EL printf("\n")
  11. #define OK printf("OK")
  12. #define pb push_back
  13. #define mp make_pair
  14. #define ep emplace_back
  15. #define X first
  16. #define Y second
  17. #define fillchar(a,x) memset(a, x, sizeof(a))
  18. #define FOR(i,l,r) for (int i=l;i<=r;i++)
  19. #define FORD(i,r,l) for (int i=r;i>=l;i--)
  20.  
  21. const int base = 1e9;
  22. typedef vector<int> BigInt;
  23.  
  24. void Set(BigInt &a) {
  25. while (a.size() > 1 && a.back() == 0) a.pop_back();
  26. }
  27.  
  28. void Print(BigInt a) {
  29. Set(a);
  30. printf("%d", (a.size() == 0) ? 0 : a.back());
  31. FORD(i,a.size()-2,0) printf("%09d", a[i]); EL;
  32. }
  33.  
  34.  
  35.  
  36. BigInt Integer(string s) {
  37. BigInt ans;
  38. if (s[0] == '-') return ans;
  39. if (s.size() == 0) {ans.pb(0); return ans;}
  40. while (s.size()%9 != 0) s = '0'+s;
  41. for (int i=0;i<s.size();i+=9) {
  42. int v = 0;
  43. for (int j=i;j<i+9;j++) v = v*10+(s[j]-'0');
  44. ans.insert(ans.begin(),v);
  45. }
  46. Set(ans);
  47. return ans;
  48. }
  49.  
  50. BigInt Integer(char c[]) {
  51. string s = "";
  52. FOR(i,0,strlen(c)-1) s = s + c[i];
  53. return Integer(s);
  54. }
  55.  
  56. BigInt Integer(ll x) {
  57. string s = "";
  58. while (x > 0) s = char(x%10+'0') + s, x /= 10;
  59. return Integer(s);
  60. }
  61.  
  62. BigInt Integer(int x) {
  63. return Integer((ll) x);
  64. }
  65.  
  66.  
  67.  
  68.  
  69. void operator >> (istream &in, BigInt &a) {
  70. string s;
  71. getline(cin, s);
  72. a = Integer(s);
  73. }
  74.  
  75. void operator << (ostream &out, BigInt a) {
  76. Print(a);
  77. }
  78.  
  79.  
  80.  
  81.  
  82. bool operator < (BigInt a, BigInt b) {
  83. Set(a);
  84. Set(b);
  85. if (a.size() != b.size()) return (a.size() < b.size());
  86. FORD(i,a.size()-1,0)
  87. if (a[i] != b[i]) return (a[i] < b[i]);
  88. return false;
  89. }
  90.  
  91. bool operator > (BigInt a, BigInt b) {
  92. return (b < a);
  93. }
  94.  
  95. bool operator == (BigInt a, BigInt b) {
  96. return (!(a < b) && !(b < a));
  97. }
  98.  
  99. bool operator <= (BigInt a, BigInt b) {
  100. return (a < b || a == b);
  101. }
  102.  
  103. bool operator >= (BigInt a, BigInt b) {
  104. return (b < a || b == a);
  105. }
  106.  
  107. bool operator < (BigInt a, int b) {
  108. return (a < Integer(b));
  109. }
  110.  
  111. bool operator > (BigInt a, int b) {
  112. return (a > Integer(b));
  113. }
  114.  
  115. bool operator == (BigInt a, int b) {
  116. return (a == Integer(b));
  117. }
  118.  
  119. bool operator >= (BigInt a, int b) {
  120. return (a >= Integer(b));
  121. }
  122.  
  123. bool operator <= (BigInt a, int b) {
  124. return (a <= Integer(b));
  125. }
  126.  
  127.  
  128.  
  129. BigInt max(BigInt a, BigInt b) {
  130. if (a > b) return a;
  131. return b;
  132. }
  133.  
  134. BigInt min(BigInt a, BigInt b) {
  135. if (a < b) return a;
  136. return b;
  137. }
  138.  
  139.  
  140.  
  141.  
  142. BigInt operator + (BigInt a, BigInt b) {
  143. Set(a);
  144. Set(b);
  145. BigInt ans;
  146. int carry = 0;
  147. FOR(i,0,max(a.size(), b.size())-1) {
  148. if (i < a.size()) carry += a[i];
  149. if (i < b.size()) carry += b[i];
  150. ans.pb(carry%base);
  151. carry /= base;
  152. }
  153. if (carry) ans.pb(carry);
  154. Set(ans);
  155. return ans;
  156. }
  157.  
  158. BigInt operator + (BigInt a, int b) {
  159. return a + Integer(b);
  160. }
  161.  
  162. BigInt operator ++ (BigInt &a) { // ++a
  163. a = a + 1;
  164. return a;
  165. }
  166.  
  167. void operator += (BigInt &a, BigInt b) {
  168. a = a + b;
  169. }
  170.  
  171. void operator += (BigInt &a, int b) {
  172. a = a + b;
  173. }
  174.  
  175.  
  176.  
  177.  
  178. BigInt operator - (BigInt a, BigInt b) {
  179. Set(a);
  180. Set(b);
  181. BigInt ans;
  182. int carry = 0;
  183. FOR(i,0,a.size()-1) {
  184. carry += a[i] - (i < b.size() ? b[i] : 0);
  185. if (carry < 0) ans.pb(carry+base), carry = -1;
  186. else ans.pb(carry), carry = 0;
  187. }
  188. Set(ans);
  189. return ans;
  190. }
  191.  
  192. BigInt operator - (BigInt a, int b) {
  193. return a - Integer(b);
  194. }
  195.  
  196. void operator -- (BigInt &a) { // --a
  197. a = a - 1;
  198. }
  199.  
  200. void operator -= (BigInt &a, BigInt b) {
  201. a = a + b;
  202. }
  203.  
  204. void operator -= (BigInt &a, int b) {
  205. a = a - b;
  206. }
  207.  
  208.  
  209.  
  210.  
  211. BigInt operator * (BigInt a, BigInt b) {
  212. Set(a);
  213. Set(b);
  214. BigInt ans;
  215. ans.assign(a.size()+b.size(), 0);
  216. FOR(i,0,a.size()-1) {
  217. ll carry = 0ll;
  218. for (int j=0;j<b.size() || carry > 0;j++) {
  219. ll s = ans[i+j] + carry + (ll)a[i]*(j<b.size()?(ll)b[j]:0ll);
  220. ans[i+j] = s%base;
  221. carry = s/base;
  222. }
  223. }
  224. Set(ans);
  225. return ans;
  226. }
  227.  
  228. BigInt operator * (BigInt a, int b) {
  229. return a * Integer(b);
  230. }
  231.  
  232. void operator *= (BigInt &a, BigInt b) {
  233. a = a * b;
  234. }
  235.  
  236. void operator *= (BigInt &a, int b) {
  237. a = a * b;
  238. }
  239.  
  240.  
  241.  
  242. BigInt operator / (BigInt a, BigInt b) {
  243. Set(a);
  244. Set(b);
  245. if (b == Integer(0)) return Integer("-1");
  246. BigInt ans, cur;
  247. FORD(i,a.size()-1,0) {
  248. cur.insert(cur.begin(), a[i]);
  249. int x = 0, L = 0, R = base;
  250. while (L <= R) {
  251. int mid = (L+R)>>1;
  252. if (b*Integer(mid) > cur) {
  253. x = mid;
  254. R = mid-1;
  255. }
  256. else
  257. L = mid+1;
  258. }
  259. cur = cur - Integer(x-1)*b;
  260. ans.insert(ans.begin(),x-1);
  261. }
  262. Set(ans);
  263. return ans;
  264. }
  265.  
  266. BigInt operator / (BigInt a, int b) {
  267. Set(a);
  268. BigInt ans;
  269. ll cur = 0ll;
  270. FORD(i,a.size()-1,0) {
  271. cur = (cur*(ll)base + (ll)a[i]);
  272. ans.insert(ans.begin(),cur/b);
  273. cur %= b;
  274. }
  275. Set(ans);
  276. return ans;
  277. }
  278.  
  279. void operator /= (BigInt &a, BigInt b) {
  280. a = a / b;
  281. }
  282.  
  283. void operator /= (BigInt &a, int b) {
  284. a = a / b;
  285. }
  286.  
  287.  
  288.  
  289. BigInt operator % (BigInt a, BigInt b) {
  290. Set(a);
  291. Set(b);
  292. if (b == Integer(0)) return Integer("-1");
  293. BigInt ans;
  294. FORD(i,a.size()-1,0) {
  295. ans.insert(ans.begin(), a[i]);
  296. int x = 0, L = 0, R = base;
  297. while (L <= R) {
  298. int mid = (L+R)>>1;
  299. if (b*Integer(mid) > ans) {
  300. x = mid;
  301. R = mid-1;
  302. }
  303. else
  304. L = mid+1;
  305. }
  306. ans = ans - Integer(x-1)*b;
  307. }
  308. Set(ans);
  309. return ans;
  310. }
  311.  
  312. int operator % (BigInt a, int b) {
  313. Set(a);
  314. if (b == 0) return -1;
  315. int ans = 0;
  316. FORD(i,a.size()-1,0)
  317. ans = (ans*(base%b) + a[i]%b)%b;
  318. return ans;
  319. }
  320.  
  321. void operator %= (BigInt &a, BigInt b) {
  322. a = a % b;
  323. }
  324.  
  325. void operator %= (BigInt &a, int b) {
  326. a = a % Integer(b);
  327. }
  328.  
  329. BigInt gcd(BigInt a, BigInt b) {
  330. Set(a);
  331. Set(b);
  332. while (b > Integer(0)) {
  333. BigInt r = a%b;
  334. a = b;
  335. b = r;
  336. }
  337. Set(a);
  338. return a;
  339. }
  340.  
  341. BigInt lcm(BigInt a, BigInt b) {
  342. return (a*b/gcd(a,b));
  343. }
  344.  
  345.  
  346. BigInt sqrt(BigInt a) {
  347. BigInt x0 = a, x1 = (a+1)/2;
  348. while (x1 < x0) {
  349. x0 = x1;
  350. x1 = (x1+a/x1)/2;
  351. }
  352. return x0;
  353. }
  354.  
  355.  
  356. BigInt pow(BigInt a, BigInt b) {
  357. if (b == Integer(0)) return Integer(1);
  358. BigInt tmp = pow(a, b/2);
  359. if (b%2 == 0) return tmp * tmp;
  360. return tmp * tmp * a;
  361. }
  362.  
  363.  
  364. BigInt pow(BigInt a, int b) {
  365. return pow(a,(Integer(b)));
  366. }
  367.  
  368.  
  369. int log(int n, BigInt a) { // log_n(a)
  370. Set(a);
  371. int ans = 0;
  372. while (a > Integer(1)) {
  373. ans++;
  374. a /= n;
  375. }
  376. return ans;
  377. }
  378.  
  379.  
  380. int main()
  381. {
  382.  
  383. BigInt A;cin>>A;
  384. BigInt B;cin>>B;
  385.  
  386. BigInt TempA=pow(A,B);
  387. BigInt TempB=pow(B,A);
  388. //cout<<TempA<<" "<<TempB<<endl;
  389. Print(TempA - TempB);
  390. return 0;
  391. }
Success #stdin #stdout 0s 4552KB
stdin
Standard input is empty
stdout
0