- C++
唯一分解定理
- 2025-5-1 14:43:24 @
4 条评论
-
admin SU @ 2025-7-13 14:51:57
#include <iostream> #include <vector> using namespace std; // 对正整数进行唯一分解 vector<pair<int, int>> primeFactorization(int n) { vector<pair<int, int>> factors; for (int i = 2; i * i <= n; ++i) { int exponent = 0;//幂数数 while (n % i == 0) { n /= i; ++exponent; } if (exponent > 0) { //factors.emplace_back(i, exponent);//隐式封装 factors.push_back(make_pair(i, exponent));//显式封装 } } if (n > 1) { factors.emplace_back(n, 1); } return factors; } int main() { int num; cout << "请输入一个正整数: "; cin >> num; auto result = primeFactorization(num); //auto vector类型 cout << num << " 的唯一分解形式为: "; //result.size()获取vector的长度 //size_t 短整数 size_t含义专门存储数组等STL容器的长度 for (size_t i = 0; i < result.size(); ++i) { cout << result[i].first;//20 = 2^2 * 5 if (result[i].second > 1) { cout << "^" << result[i].second; } if (i < result.size() - 1) { cout << " * "; } } cout << endl; return 0; }
-
2025-7-13 13:54:23@
2032:【例4.18】分解质因数
时间限制: 1000 ms 内存限制: 65536 KB 提交数:56003 通过数: 35791
【题目描述】 把一个合数分解成若干个质因数乘积的形式(即求质因数的过程)叫做分解质因数。分解质因数(也称分解素因数)只针对合数。
输入一个正整数n,将n分解成质因数乘积的形式。
【输入】 一个正整数n。
【输出】 分解成质因数乘积的形式。质因数必须由小到大,见样例。
【输入样例】
36
【输出样例】
36=2*2*3*3
【提示】 【数据范围】
对于所有数据,2≤n≤20000。
#include<iostream> using namespace std; int main() { int n; cin >> n; int i = 2; cout<<n<<"="; bool flag = true;//true表示是第一个数 while(n!=1){ if(n%i==0){//5它能被5 while(n % i == 0){//5能被5整除 n/=i; if(flag == true){ cout<<i; flag = false; }else{ cout<<"*"<<i; } } } i+=1;//6 } return 0; }
-
2025-5-8 21:09:46@
-
2025-5-1 14:49:54@
用C++实现一个程序,对给定的正整数进行唯一分解
#include <iostream> #include <vector> using namespace std; // 对正整数进行唯一分解 vector<pair<int, int>> primeFactorization(int n) { vector<pair<int, int>> factors; for (int i = 2; i * i <= n; ++i) { int exponent = 0; while (n % i == 0) { n /= i; ++exponent; } if (exponent > 0) { factors.emplace_back(i, exponent); } } if (n > 1) { factors.emplace_back(n, 1); } return factors; } int main() { int num; cout << "请输入一个正整数: "; cin >> num; auto result = primeFactorization(num); cout << num << " 的唯一分解形式为: "; for (size_t i = 0; i < result.size(); ++i) { cout << result[i].first; if (result[i].second > 1) { cout << "^" << result[i].second; } if (i < result.size() - 1) { cout << " * "; } } cout << endl; return 0; }
你已经给出了部分代码,下面我会基于你给出的头文件和命名空间,补全代码实现对给定正整数进行唯一分解的功能。
代码解释
primeFactorization
函数:- 该函数接收一个正整数
n
作为参数,返回一个vector<pair<int, int>>
类型的结果,其中每个pair
存储一个质因数及其对应的指数。 - 从最小的质数
2
开始,通过循环for (int i = 2; i * i <= n; ++i)
来尝试将n
分解。对于每个可能的质因数i
,使用while
循环计算其在n
中的指数exponent
。 - 如果
exponent
大于0
,说明i
是n
的一个质因数,将其和对应的指数作为一个pair
存入factors
中。 - 当循环结束后,如果
n
仍然大于1
,说明n
本身是一个质数,将其作为一个质因数存入factors
中,指数为1
。
- 该函数接收一个正整数
main
函数:- 提示用户输入一个正整数,并将其存储在变量
num
中。 - 调用
primeFactorization
函数对num
进行分解,将结果存储在result
中。 - 遍历
result
,按照质因数和指数的格式输出分解结果,不同质因数之间用*
连接。
- 提示用户输入一个正整数,并将其存储在变量
复杂度分析
- 1