题解 | #小苯的数字权值#

小苯的数字权值

https://www.nowcoder.com/practice/aeacca655eec45999a6dc4d998dfd4a5

,随便举几个例子,可以发现结论:

  • 时,我们把全部拆开,这样可以得到权值是
  • 时,全部拆开得到的权值,合并全部得到的权值为,后面明显更大,而且发现如果将进行拆分,那么一定不会更优。

所以写的时候只需要注意特判就好。

#include <iostream>
#include <vector>
using namespace std;
const int N = 2e5 + 10;
vector<int> primes;
bool vis[N];
void init() {
    vis[0] = vis[1] = 1;
    for (int i = 2; i < N; i++) {
        if (!vis[i]) primes.push_back(i);
        for (int p : primes) {
            if (i * p >= N) break;
            vis[i * p] = 1;
            if (i % p == 0) break;
        }
    }
}
int main() {
    int _;
    cin >> _;
    init();
    while (_--) {
        int n;
        cin >> n;
        int ans = 1;
        if (!vis[n]) {
            ans = 2;
        } else {
            vector<int> v;
            for (int p : primes) {
                if(n<p) break;
                if (n % p == 0) {
                    int c = 0;
                    while (n % p == 0) {
                        c++;
                        n /= p;
                    }
                    v.push_back(c);
                }
            }
            if (n > 1) v.push_back(2);
            // cout << v.size() << endl;
            if (v.size() == 1) ans = v[0] * 2;
            else {
                for (int c : v) ans *= (c + 1);
            }
        }
        cout << ans << endl;
    }
}
全部评论

相关推荐

双尔:你就写拥有ai开发经历,熟练运用提示词,优化ai,提高ai回答质量
点赞 评论 收藏
分享
给🐭🐭个面试机会...:我擦seed✌🏻
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务