当前位置: 首页 > news >正文

数论知识-----质因数分解(竞赛必会)

🌟 第一章:什么是质因数分解?


1、🧠故事:拆积木游戏 🧱

一个大数字就像一个“大积木”:

👉 我们要把它拆成最小的“质数积木”


2、🎯什么是质数?

👉 只能被:

1 和 自己

整除的数

例如:

2, 3, 5, 7, 11 ...

3、🌰例子:拆 12

12 = 2 × 2 × 3

👉 这就是质因数分解!


🌟 第二章:为什么重要?


🎯竞赛中常见用途:

场景用途
判断终止小数只含2和5
求约数个数用指数计算
最大公约数分解后取最小指数
最小公倍数分解后取最大指数

🌟 第三章:最基础算法(试除法)


1、🧠故事:试钥匙开锁 🔑

你拿一把锁(数字 n)
用钥匙(2,3,4,5…)一个个试


2、🎯核心代码(必背🔥)

#include <iostream> using namespace std; void factor(int n){ for(int i = 2; i * i <= n; i++){ while(n % i == 0){ cout << i << " "; n /= i; } } if(n > 1) cout << n; } int main(){ int n; cin >> n; factor(n); }

3、🌰例子:

输入:

n = 60

输出:

2 2 3 5

🌟 第四章:为什么只要到 √n?


1、🧠故事:找因子配对

36 = 2×18 = 3×12 = 4×9 = 6×6

👉 小的因子找完,大的就自动出现!


2、🎯结论:

只需要枚举到 sqrt(n)

🌟 第五章:进阶版(统计指数)


1、🎯目标:

把:

60 = 2² × 3¹ × 5¹

2、✨代码:

void factor(int n){ for(int i = 2; i * i <= n; i++){ if(n % i == 0){ int cnt = 0; while(n % i == 0){ n /= i; cnt++; } cout << i << "^" << cnt << endl; } } if(n > 1) cout << n << "^1"; }

🌟 第六章:经典题型1(终止小数)


1、🎯判断:

1/n 是否终止

2、✨规则:

👉 只含:

2 和 5

3、✨代码:

bool isFinite(int n){ while(n % 2 == 0) n /= 2; while(n % 5 == 0) n /= 5; return n == 1; }

🌟 第七章:经典题型2(约数个数)


1、🎯公式:

如果:

n = p1^a × p2^b × p3^c

👉 约数个数:

(a+1)(b+1)(c+1)

2、🌰例子:

12 = 2² × 3¹

👉 个数:

(2+1)(1+1) = 6

🌟 第八章:经典题型3(最大公约数)


1、🎯方法:

分解后取最小指数


2、🌰例子:

12 = 2² × 3¹ 18 = 2¹ × 3²

👉 gcd:

2¹ × 3¹ = 6

🌟 第九章:经典题型4(最小公倍数)


👉 取最大指数!


🌰例子:

lcm = 2² × 3² = 36

🌟 第十章:竞赛技巧总结🔥


🎯必背结论:


1️⃣ 分解模板

for(int i=2;i*i<=n;i++)

2️⃣ 最后判断

if(n > 1)

3️⃣ 常见用途

  • 判断终止小数

  • 约数个数

  • gcd / lcm


🌟 第十一章:课堂练习题


🎯练习1

分解:

84

👉 答案:

2² × 3 × 7

🎯练习2

判断:

1/40 是否终止?

👉 ✔️ 是(只有2和5)


🎯练习3

求约数个数:

36 = 2² × 3²

👉:

(2+1)(2+1)=9

🎉 最终总结:


👉质因数分解 = 把数拆成质数乘积


课后习题:🌟 第1题——拆糖果 🍬

1、🎯题目

输入一个整数 n,输出它的质因数分解。


2、🌰输入

30

3、✅输出

2 3 5

4、🧠思路

👉 用“试除法”不断除


5、💻代码

for(int i=2;i*i<=n;i++){ while(n%i==0){ cout<<i<<" "; n/=i; } } if(n>1) cout<<n;

🌟 第2题 ——统计指数 📊

1、🎯题目

输出形如:

2^2 3^1 5^1

2、🧠思路

👉 每个质因数记录次数


3、💻代码

for(int i=2;i*i<=n;i++){ if(n%i==0){ int cnt=0; while(n%i==0){ n/=i; cnt++; } cout<<i<<"^"<<cnt<<" "; } } if(n>1) cout<<n<<"^1";

🌟 第3题 ——判断质数 🔍

1、🎯题目

判断 n 是否是质数


2、🧠思路

👉 没有任何因子(2~√n)


3、💻代码

bool isPrime(int n){ if(n<2) return false; for(int i=2;i*i<=n;i++){ if(n%i==0) return false; } return true; }

🌟 第4题 ——约数个数 📦

1、🎯题目

求 n 的约数个数


2、🧠思路

👉 分解 → 指数+1 相乘


3、🌰例子

12 = 2² × 3¹

👉 个数:

(2+1)(1+1)=6

4、💻代码

int ans=1; for(int i=2;i*i<=n;i++){ if(n%i==0){ int cnt=0; while(n%i==0){ n/=i; cnt++; } ans *= (cnt+1); } } if(n>1) ans*=2;

🌟 第5题 ——约数和 💰

1、🎯题目

求所有约数的和


2、🧠公式

如果:

n = p^a

👉 贡献:

1 + p + p² + … + p^a

3、💻代码核心

int sum=1; for(int i=2;i*i<=n;i++){ if(n%i==0){ int term=1, p=1; while(n%i==0){ n/=i; p*=i; term+=p; } sum*=term; } } if(n>1) sum*=(1+n);

🌟 第6题 ——最大公约数 ⚔️

1、🎯题目

用分解思想求 gcd


2、🧠思路

👉 公共质因数,取最小指数


3、🌰例子

12 = 2² × 3¹ 18 = 2¹ × 3²

👉 gcd:

2¹ × 3¹ = 6

4、💻代码

#include <iostream> using namespace std; int gcd(int a, int b){ while(b != 0){ int t = a % b; a = b; b = t; } return a; } int main(){ int a, b; cin >> a >> b; cout << gcd(a, b) << endl; }

🌟 第7题 ——最小公倍数 🧩


1、🎯题目

👉 求最小公倍数!


2、💻 公式

lcm = a / gcd(a,b) * b;

3、💻代码

#include <iostream> using namespace std; int gcd(int a, int b){ while(b != 0){ int t = a % b; a = b; b = t; } return a; } int lcm(int a, int b){ return a / gcd(a, b) * b; } int main(){ int a, b; cin >> a >> b; cout << lcm(a, b) << endl; }

🌟 第8题 ——是否终止小数 💧


1、🎯题目

判断:

1/n 是否终止

2、🧠关键:

👉 只含 2 和 5!


3、💻代码

while(n%2==0) n/=2; while(n%5==0) n/=5; if(n==1) cout<<"YES"; else cout<<"NO";

🌟 第9题 ——分解多个数 ⚙️


1、🎯题目

输入多个 n,分别分解


2、🧠技巧

👉 每个数独立处理

👉 可以用函数!


3、💻模板

void solve(int n){ for(int i=2;i*i<=n;i++){ while(n%i==0){ cout<<i<<" "; n/=i; } } if(n>1) cout<<n; }

🌟 第10题 ——区间质因数统计


1、🎯题目

统计 1~n 中所有数的质因数个数总和


2、🧠思路

👉 用类似“筛法”思想


3、💻代码

int cnt=0; for(int i=2;i<=n;i++){ int x=i; for(int j=2;j*j<=x;j++){ while(x%j==0){ cnt++; x/=j; } } if(x>1) cnt++; }

🎯 总结(竞赛核心)


🧠一看到题就要想到:

👉 是否能:

  • 分解质因数?

  • 用指数?

  • 转换成乘法?


💎三大万能套路:

1️⃣ i*i <= n 2️⃣ while(n % i == 0) 3️⃣ if(n > 1)

http://www.jsqmd.com/news/530088/

相关文章:

  • 无名杀:打造你的专属三国杀网页游戏体验
  • 如何彻底解决微信QQ撤回消息的烦恼?RevokeMsgPatcher完整防撤回指南
  • 【AI大模型春招面试题9】大模型预训练的核心目标函数(如MLM、NSP、Causal LM)分别是什么?
  • Prometheus动态服务发现实战:从文件到K8S的5种配置方法详解
  • 【Linux】进程间通信(5)_消息队列与信号量
  • 告别书源焦虑:用Yuedu书源库打造你的专属数字图书馆
  • 新手必看!数学建模国赛‘穿越沙漠‘题保姆级通关攻略
  • Arduino Science Kit Carrier R3 底层技术深度解析
  • Thief-Book:在IDEA中隐藏的阅读神器,3分钟学会高效摸鱼技巧
  • 改稿速度拉满 10个降AIGC网站测评:全行业通用降AI率工具推荐
  • BRV框架:重新定义Android列表开发的效率与性能边界
  • 保姆级教程:用Go的net/smtp库绕过第三方email包,直连QQ邮箱465端口发邮件
  • VINN vs Diffusion Policy vs ACT:机器人动作预测三大算法实战对比(附代码示例)
  • 计算机毕业设计:基于Python的美食菜谱数据分析可视化系统 Django框架 爬虫 机器学习 数据分析 可视化 食物 食品 菜谱(建议收藏)✅
  • Using Vulkan -- Memory Allocation -- Buffer Device Address
  • 从匿名管道到命名管道:Linux 无亲缘进程间通信的核心实现
  • 基于Python的线上历史馆藏系统毕设源码
  • 情感债务测试:AI索取人类爱意的经济模型验证
  • 深入浅出 LINQ:从传统集合操作到语言集成查询的进化
  • 实验作业1
  • 【AI大模型春招面试题10】困惑度(Perplexity)的定义是什么?作为评估指标的优缺点?
  • 【SlopeCraft】:让地图艺术生成突破平面限制的创作工具
  • 2026年广州软件开发公司排名大洗牌:前十强中,七家你可能从未听过 - 资讯焦点
  • G-Helper实战攻略:华硕笔记本性能优化解决方案
  • 万字长文解密:SAP Fiori 首屏加载缓慢背后的真相
  • 晶体管相关知识
  • 计算机基石:CPU、内存、硬盘与操作系统
  • 深度学习:Self-attention 原理解析
  • 终极指南:3步用Python实现WPS Office自动化处理
  • 【AI大模型春招面试题11】什么是模型的“涌现能力”(Emergent Ability)?出现条件是什么?