#include #include #include #include #include #include #include #include #define LL long long int #define P(N) printf("%d\n",N); #define S(N) scanf("%d",&N); #define SL(N) scanf("%lld",&N); #define pb push_back #define mp make_pair #define pnl printf("\n"); #define FOR(i,a,b) for (i=a;i<=b;i++) #define mem(a,val) memset(a,val,sizeof(a)) using namespace std; int gcd(int a, int b){ int temp; while(b>0) { temp= b; b=a%b; a=temp;} return a;} // LL dp[1000010]; unordered_map final_ans; int pre_N = 10000; void precompute(int N) { final_ans[1] = 1; for(int x =2;x<=N;x++) { final_ans[x] = x + 1; int sqrt_x = sqrt(x); for(int j=2;j<=sqrt_x;j++) { if(x%j==0) { final_ans[x] = max(final_ans[x], final_ans[j]*(x/j) + 1); if(x/j != j) { final_ans[x] = max(final_ans[x], final_ans[x/j]*j + 1); } } } } } LL solve(LL N) { if(final_ans[N] != 0) { return final_ans[N]; } LL cur_parts; if(N == 1) { cur_parts = 1; } else { cur_parts = N+1; } LL sqrt_x = sqrt(N); for(LL j=2;j<=sqrt_x;j++) { if(N%j==0) { cur_parts = max(cur_parts, solve(j)*(N/j) + 1); if(N/j != j) { cur_parts = max(cur_parts, solve(N/j)*j + 1); } } } final_ans[N] = cur_parts; return cur_parts; } int main() { // precompute(pre_N); // for(int i = 1;i<=100;i++) { // cout<>N; for(int i = 0;i