2021牛客寒假算法基础集训营2 I 牛牛的“质因数”(数学)

牛牛的“质因数”

https://ac.nowcoder.com/acm/contest/9982/I

Description

牛牛定义了一个函数F(x),它表示将x做质因数分解后得到的数字从小到大升序排列,然后将其“拼接”成一个大整数。
例如1500=22355*5,F(1500)=223555。
牛牛现在想要知道 的值。

Solution

, 考虑朴素做法:筛出 的素数,对于 的每一个数字进行质因数分解 模拟, 预处理长度后拼接上去。我的模拟做法大概是时间复杂度大概是
考虑优化:在埃氏筛中,筛法每次遍历素数的所有倍数,显然每次可以 实现上述 的递推。具体做法是,如果对于素数 , 如果,那么显然有 ——相当于在后面先填上 个0,这个过程可以做 次。
举个例子,,那么在埃氏筛的时候,

最后统计答案的时候计算 即可
时间复杂度约为 ——具体我也不知道怎么算

Code

#include <bits/stdc++.h>
#pragma GCC optimize(3)
typedef long long ll;
using namespace std;

const int N = 4e6 + 5;
const int mod = 1e9 + 7;
const int inf = 0x3f3f3f3f;
ll dp[N];
bool vis[N];
int prime[N], tot;
void solve() {
  std::function<void(int)> init = [&](int n) -> void {
    for(int i = 2; i <= n; i++) {
      if(!vis[i]) {
        prime[++tot] = i; 
        dp[i] = i; // 素数的贡献为本身
        int pre = i;
        int len = 0, need = 1; // 长度
        while(pre) {
          pre /= 10; len++, need *= 10;
        }
        for(int j = 2 * i; j <= n; j += i) {
          vis[j] = 1;
          int cur = j;
          while(cur % i == 0) {
            cur /= i;
            dp[j] = (dp[j] * need % mod + i) % mod;
          }
        }
      }
    }
  };
  int n; cin >> n;
  init(n);
  ll ans = 0;
  for(int i = 2; i <= n; i++) {
    ans += dp[i];
    ans %= mod;
  }
  cout << ans << '\n';
}
int main() {
  ios::sync_with_stdio(false), cin.tie(nullptr), cout.tie(nullptr);
  int T = 1; //cin >> T;
  while(T--) {
    solve();
  }
  return 0;
} 
Kurisu与牛客的每日一题 文章被收录于专栏

每日一题

全部评论

相关推荐

点赞 评论 收藏
分享
评论
13
收藏
分享

创作者周榜

更多
正在热议
更多
# 春招至今,你的战绩如何? #
10491次浏览 92人参与
# 你的实习产出是真实的还是包装的? #
1855次浏览 42人参与
# MiniMax求职进展汇总 #
24004次浏览 308人参与
# 军工所铁饭碗 vs 互联网高薪资,你会选谁 #
7561次浏览 43人参与
# 简历第一个项目做什么 #
31664次浏览 335人参与
# 重来一次,我还会选择这个专业吗 #
433439次浏览 3926人参与
# 米连集团26产品管培生项目 #
5937次浏览 215人参与
# 当下环境,你会继续卷互联网,还是看其他行业机会 #
187103次浏览 1122人参与
# 牛客AI文生图 #
21422次浏览 238人参与
# 不考虑薪资和职业,你最想做什么工作呢? #
152348次浏览 888人参与
# 研究所笔面经互助 #
118898次浏览 577人参与
# 简历中的项目经历要怎么写? #
310217次浏览 4210人参与
# AI时代,哪些岗位最容易被淘汰 #
63642次浏览 822人参与
# 面试紧张时你会有什么表现? #
30505次浏览 188人参与
# 你今年的平均薪资是多少? #
213074次浏览 1039人参与
# 你怎么看待AI面试 #
180035次浏览 1255人参与
# 高学历就一定能找到好工作吗? #
64324次浏览 620人参与
# 你最满意的offer薪资是哪家公司? #
76485次浏览 374人参与
# 我的求职精神状态 #
448043次浏览 3129人参与
# 正在春招的你,也参与了去年秋招吗? #
363373次浏览 2638人参与
# 腾讯音乐求职进展汇总 #
160638次浏览 1111人参与
# 校招笔试 #
470875次浏览 2964人参与
牛客网
牛客网在线编程
牛客网题解
牛客企业服务