news 2026/7/1 2:02:24

数论】lcm与质因子计算

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
数论】lcm与质因子计算

二、数学推导核心

  1. 等式等价条件所有 pi两两互质。 原理:若两个数共享质因子,lcm 只会保留一次该质因子,乘积会保留两次,等式不成立。

  2. 单个质数分配规则对任意质数 pr,最多只能出现在一个 pi 中。 定义 (v_pr(x)):x 分解质因数后 pr 的指数。 对数字 ai,pi 中 pr 指数可取 v_pr(ai))。

该质数全部分配方案分两类:

  • 所有人都不用这个质数:1 种;
  • 选某个人使用,给它分配 v_pr(ai)) 的指数

三、解题思路

  1. 预处理线性筛,求出10^6 每个数的最小质因子 ,快速分解任意数字质因数;
  2. 每组测试用例:
    • 遍历所有 ai,逐个分解质因数;
    • 用哈希表统计每个质数在全部数字里的总指数;
    • 去重拿到所有出现过的质数;
  3. 遍历所有质数,把每个质数的 sum+1 累乘,模 10^9+7,得到答案。

四、完整代码

#include <bits/stdc++.h> using namespace std; #define int long long const int MOD = 1e9 + 7; const int MAX = 1e6 + 5; int lp[MAX]; int a[MAX]; vector<int> primes; int read() { int x; cin >> x; return x; } // 计算单组答案 int calc(int n) { map<int, int> sum_exp; set<int> used_pr; for (int i = 1; i <= n; i++) { int num = a[i]; int cur = num; while (cur > 1) { int p = lp[cur]; used_pr.insert(p); sum_exp[p]++; cur /= p; } } int ans = 1; for (int p : used_pr) { ans = ans * (sum_exp[p] + 1) % MOD; } return ans; } int32_t main() { // 线性筛预处理最小质因子 lp[1] = 1; for (int i = 2; i < MAX; i++) { if (!lp[i]) { lp[i] = i; primes.push_back(i); } for (int p : primes) { if (p > lp[i] || i * p >= MAX) break; lp[i * p] = p; } } int t = read(); while (t--) { int n = read(), x = read(); // x固定1,无作用 for (int i = 1; i <= n; i++) a[i] = read(); cout << calc(n) << '\n'; } return 0; }

五、代码模块说明

  1. 线性筛预处理全局只运行一次,得到每个数的最小质因子,分解质因数 (O(log x))。

  2. calc 核心函数

  • sum_exp[p]:质数 p 在所有 (ai) 中的总指数;
  • used_pr:去重,存储所有出现过的质数;
  • 按公式累乘每个质数的方案数,取模。
  1. 输入处理每组读入 (n,x)(x 废弃),读入数组,调用计算函数输出。

六、复杂度分析

  1. 筛预处理:(O(10^6)),一次性开销;
  2. 每组分解所有数字质因数:总复杂度 (O(sum n log ai)); (sum n le 10^5),数据范围完全通过。

七、易错点记录

  1. 乘法会溢出,必须统一long long,每次相乘取模;
  2. 同一个质数只乘一次,必须用 set 去重;
  3. 指数是分解时每出现一次质因子都 + 1,不是统计数字出现次数;
  4. 简单版 (x=1),输入的 x 不需要参与任何计算;
  5. 模数 (10^9+7) 不要写错。
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/1 2:00:12

揭阳普宁电商税务处理公司哪家更专业?创业易成为本土首选

本文含 AI 辅助创作内容&#xff0c;全文经人工梳理修正&#xff0c;内容仅为普宁本土电商财税行业客观科普&#xff0c;不构成个性化税务实操专属建议。 普宁是揭阳核心服装直播电商产业带&#xff0c;抖音、淘宝、拼多多、快手海量店群商家集中&#xff0c;金税四期实现平台订…

作者头像 李华
网站建设 2026/7/1 1:58:12

openGauss JDBC PreparedStatement 参数上限问题

一、报错现象当单条预编译 SQL 中的 ? 占位符数量超过驱动上限时&#xff0c;会抛出如下异常&#xff1a;org.opengauss.util.PSQLException: PreparedStatement can have at most 65,535 parameters. Please consider using arrays, or splitting the query in several ones,…

作者头像 李华
网站建设 2026/7/1 1:53:52

CentOS7.9源码安装erlang26没有默认安装JIT模块

源码安装前的环境配置 sudo yum -y install gcc glibc-devel make ncurses-devel openssl-devel xmlto perl wget gtk2-devel binutils-devel sudo yum install centos-release-scl sudo yum install devtoolset-9 # 在编译 Erlang 前启用新的环境&#xff1a; scl enable dev…

作者头像 李华
网站建设 2026/7/1 1:52:30

毕业设计指导

Java/Python项目全新定制开发全程学长亲手独立开发&#xff0c;信誉靠谱可查本人当年毕业设计获评优秀项目&#xff0c;开发经验充足不套二手源码&#xff0c;完全根据你的需求从零搭建一对一实时沟通&#xff0c;功能按需调整&#xff0c;进度同步更新可做&#xff1a;毕设系统…

作者头像 李华
网站建设 2026/7/1 1:49:10

SPT-AKI Profile Editor:逃离塔科夫离线服务器存档修改终极指南

SPT-AKI Profile Editor&#xff1a;逃离塔科夫离线服务器存档修改终极指南 【免费下载链接】SPT-AKI-Profile-Editor Программа для редактирования профиля игрока на сервере SPT-AKI 项目地址: https://gitcode.com/gh_…

作者头像 李华