intpow(int a, int b){ longlong ans = 1; while (b) { if (b & 1) { ans = ans * a; } a = a * a; b >>= 1; } return ans; } public: intnumberOfWays(int n, int x){ vector<int> dp(n + 1); dp[0] = 1; for (int th = 1; ; th++) { int p = pow(th, x); if (p > n) { break; } for (int i = n; i >= p; i--) { dp[i] = (dp[i] + dp[i - p]) % MOD; } } return dp.back(); } };
Python
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
''' Author: LetMeFly Date: 2025-08-12 09:48:56 LastEditors: LetMeFly.xyz LastEditTime: 2025-08-12 21:37:06 ''' classSolution: defnumberOfWays(self, n: int, x: int) -> int: dp = [1] + [0] * n th = 1 whileTrue: p = th ** x if p > n: break th += 1 for i inrange(n, p - 1, -1): dp[i] += dp[i - p] return dp[-1] % 1000000007