2032:【例4.18】分解质因数

本文介绍了如何编写一个程序来实现输入一个正整数n,将其分解成质因数的乘积形式,包括使用循环遍历因数和判断素数的方法,以及确保输出符合指定的格式。
摘要由CSDN通过智能技术生成


时间限制: 1000 ms         内存限制: 65536 KB
提交数:38818    通过数: 24788

【题目描述】

把一个合数分解成若干个质因数乘积的形式(即求质因数的过程)叫做分解质因数。分解质因数(也称分解素因数)只针对合数。

输入一个正整数n,将n分解成质因数乘积的形式。

【输入】

一个正整数n。

【输出】

分解成质因数乘积的形式。质因数必须由小到大,见样例。

【输入样例】

36

【输出样例】

36=2*2*3*3

【提示】

【数据范围】

对于所有数据,2≤n≤20000

解析

1、这道题首先我们要关注题目的输出格式,怎么才能实现题目的形式呢?

第一步实现“n=”

cin >> n;
cout << n << '=';//输出格式

第二步实现“因数*因数”

因此它的格式就是先输出第一个因数

然后就是   *因数  的格式了。

所以我们需要一个标志,标记第一个因数

bool isFirst = true;//是否是输出的第一个数

2、怎么求质因数呢?

我们求质因数可以分为两步:

  •   求因数:要求一个数n的因数,我们可以把1到n-1这个区间所有的数进行判断(这个时候我们是不是可以用循环了呀),是不是能被n整除(我们可以判断n%i==0),如果是,那么它就是因数。

        另外这道题,需要注意的是,每次找到一个因数之后需要把n变小哟(n/i),这样当n=0的时候,就证明我们把所有的因数都完了。就可以退出循环了。

  • 判断质数:当我们求完因数之后,我们再对这个数进行判断,它是不是素数呢?下面这个代码就可以判断i是不是素数。(如果理解不了,可以硬记哟)
     for(int j=2;j*j<=i;j++)
                    {
                            if(i % j == 0)
    		        {  
                                flag = 0;//如果存在i能整除的数,那么i就不是素数
                             }
                     }

代码

#include<bits/stdc++.h>
using namespace std;
int main()
{
	int n, i = 2;
	cin >> n;
	cout << n << '=';//输出格式
	bool isFirst = true;//是否是输出的第一个数
	while(n >1 )
	{       int flag = 1;//判断每个i是否为素数,1表示是,0表示不是
                for(int j=2;j*j<=i;j++)
                {
                        if(i % j == 0)
		        {  
                            flag = 0;//如果存在i能整除的数,那么i就不是素数
                         }
                 }
		if(n % i == 0 && flag ==1)
		{
			if(isFirst)//如果是第一个数,不输出*
				isFirst = false;
			else//如果是后面的数,输出*
				cout << '*'; 
			cout << i;
			n /= i;//n发生变化,除以i
		}
		else
			i++;
	} 
	return 0; 
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值