text: rest||per<4e-8) { // return abs((amin + amax) / 2 - T) < E+eps; // } // if (amin > E + T+eps)return 0; // if (amax < T-E - eps)return 0; // if (amin > T - E - eps&&T + E + eps < amax)return 1; // ld amid = (amin + amax) / 2; // if (amid > T-eps) { // return getans(amin, amid,rest-1,per*(1-P))*(1-P) + getans(amid, amax,rest-1,per*P)*P; // } // else { // return getans(amin, amid, rest - 1,per*P)*P + getans(amid, amax, rest - 1,per*(1-P))*(1 - P); // } //} void getans(const vector<long long int>& sums,const vector<long long int>&tickets, const int now, long long int &ans,const long long int rest) { if (now == tickets.size()) { ans = min(ans, rest); return; } if (ans < rest - sums[now])return; if (rest >= tickets[now]) { getans(sums, tickets, now + 1, ans, rest - tickets[now]); } else { ans = min(ans, tickets[now] - rest); } getans(sums, tickets, now + 1, ans, rest); } int main() { //cin >> K >> R >> L; //cin >> P >> E >> T; //ld ans = getans(R, L, K,1); //cout << setprecision(22) << fixed << ans << endl; //return 0; long long int N, M, A, B, P, Q; cin >> N >> M >> A >> B >> P >> Q; if (A > B) { swap(A, B); swap(P, Q); } assert(A <= B); if (A == 1 && B == 1) { long long int ticdis = P + Q; if (atime(ticdis,N) <= M) { cout << M - atime(ticdis, N) << endl; } else { cout << min(ticdis-M%ticdis,M%ticdis) << endl; } } else { vector<long long int>tickets; long long int ans = M; for (int k = 0; k < N; ++k) { long long int tic =aplus( atime(P, powint(A, k)), atime(Q, powint(B, k))); if (tic > M) { ans = min(ans, tic - M); break; } else { tickets.emplace_back(tic); } } reverse(tickets.begin(), tickets.end()); vector<long long int>sums(tickets); for (int i = sums.size()-1; i >0; --i) { sums[i - 1] += sums[i]; } getans(sums, tickets, 0, ans, M); cout << ans << endl; } return 0; }