题目描述
将一个正整数分解质因数。例如:输入90,输出 90=2*3*3*5。
输入
输入数据包含多行,每行是一个正整数n (1<n <100000) 。
输出
对于每个整数n将其分解质因数。
输入样例
90
256
199
输出样例
90=2*3*3*5
256=2*2*2*2*2*2*2*2
199=199
分解质因数听起来既熟悉又陌生,从小学就了解过概念并使用过,但用代码如何实现不得不思考一下。下面重温下什么是质数和合数,质数又称素数,有无限个。质数定义为在大于1的自然数中,除了1和它本身以外不再有其他因数。合数指自然数中除了能被1和本身整除外,还能被其他数(0除外)整除的数。
核心思想:从最小质数开始作为除数(质数满足小于被除数),寻找可以被目标数整除的质数并输出,同时保留商作为下一次运算被除数。
//分解质因数
#include<iostream>
using namespace std;
void prim(int m);
int main()
{
int n;
cout << "please input a num:" << endl;
cin >> n;
prim(n);
return 0;
}
//分解质因数函数
void prim(int m) //m为目标数值
{
int i = 2; //从最小质数2开始
while(i < m) //满足质数作为除数小于商值
{
if(m % i == 0) //满足可整除目标数的质数
{
cout << i << "*"; //输出一个因数
m /= i; // 更新商值赋给m
}
else
i++; //未整除时寻找下一除数
}
cout << m; //最后一个除数
}