vector<int> dp(1000001); void helper(int n = 1000000) { dp[1] = 0; dp[2] = 1; for (int i = 3; i <= n; ++i) { dp[i] = 1 + dp[i - 1]; for (int j = 2; j * j <= n; ++j) { if (i % j == 0) dp[i] = min(dp[i], dp[i / j] + dp[j] + 1); } } } int main() { helper(); int n; cin >> n; int ret = 0; int temp; for (int i = 0; i < n; ++i) { cin >> temp; ret += dp[temp]; } cout << ret << endl; return 0; }
点赞 1

相关推荐

点赞 评论 收藏
分享
11-04 19:05
已编辑
东莞城市学院 单片机
不知道怎么取名字_:你这个要实习两年?哪有这么久的,感觉就是即使你毕业了,但还按实习的话,是不是不用给你缴社保公积金啥的
点赞 评论 收藏
分享
牛客网
牛客网在线编程
牛客网题解
牛客企业服务