题目:
将正整数n分解为其素因子的乘积,其中n>=2并且在int范围内。Solution类的数据成员n代表需要分解的正整数,构造函数完成对数据成员n的初始化,声明了成员函数solve()实现对n的分解。请根据样例输出实现成员函数。注意输出时每行最后一个数字后面没有空格。
思路:只对非素数进行除法运算,第一步判断所给的数是否为素数,第二步,控制除数为素数,当所除结果为零或是为素数时跳出循环即可。
#include <iostream>
#include <cmath>
# include <math.h>
using namespace std;
class Solution {
public:
Solution(int num) {
n = num;
}
void solve();//将n分解为素因子的乘积
private:
int n;
};
int main()
{
int n;
while (cin >> n) {
Solution obj(n);
obj.solve();
}
return 0;
}
//判断是否为素数
int p(int x){
int f=0;//为1则不为素数
for(int i=2;i<=sqrt(x);i++){
//必须是小于等于,必须有等于,因为因子可取sqrt(x)这个值
if(x%i==0){
f=1;
}
}
if(f==1){
// cout<<x<<' '<<0<<endl;
return 0;
} else{
// cout<<x<<' '<<1<<endl;
return 1;//为素数
}
}
void Solution::solve(){
int f=0;
cout<<n<<'=';
int num = n;
//先判断该值是否为素数,如果是直接输出,因子只有他自己
if(p(n)==1){
cout<<n<<endl;
}
else{
for(int i=2;i<=sqrt(num);){
//当该除数小于或等于0,则是被除尽或最后自己为素数后,直接输出
if(n<=0||p(n)==1){
cout<<'*'<<n<<endl;
break;
}
if(p(i)==1){//i为素数 则进行运算
if(n%i==0){
if(f==0){
cout<<i;
f=1;//控制输出格式
}
else{
cout<<'*'<<i;
}
n = n/i;
}
else{
//循环目的: 找到下一个素数
while(1){
i++;
if(p(i)==1){
break;
}
}
continue;
}
}
}
}
}```