PTA 7-9 素因子分解

题目:
将正整数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;
				}
			}
		} 
	}
	
}```
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值