【循环】分解质因数

描述

将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5

输入

输入一个整数.

输出

输出为一行,既该数的质因数分解式.

(要求分解的质因数按从小到大的顺序)

输入样例 1 

90

输出样例 1

90=2*3*3*5

提示

来源

linziyu

---------------------------------------------------------------------------------------------------------------------------------

做完这道题目,我们就不用在写作业的时候想破脑袋地分解质因数了!

为了帮助我们写作业,我们不说废话,直接开将(鼓掌)

首先,我们讲一下思路,我们知道,最小的质数是2,那么,如果n能被2整除,我们就输出2,然后将n/=2,如果n/2还能被2整除,那我们继续输出2,将n/2除2,直到不能被2整除为止

比如16,是2的倍数,输出2,16/2=8,8还能被2整除,再输出2,8/2=4,4是2的倍数……

那么,我们把数字除到不能被二整除之后,要干什么?

我举个例子就明白了,比如18,除2后是9,9已经不能被2整除了,也就是说,这时候,9里已经没有2这个因数,我们就要考虑,换一个质数进行分解,比如第二大的质数3,我们除玩了2,就可以开始考虑除以3,把9除以另一个更大的质数3,9/3=3,3/3=1,我们发现,这时候3/3等于1,也就是说我们的分解质因数已经分解完了,我们就可以结束程序了

好,我们现在已经知道了解题的基本思路,就是先找到最小的一个质数2,将n不停地除以这个质数,(如果n刚开始就不能除以2,那这个除以2的过程就不用进行了,因为n一开始就不含因数2,也就不用进行分解)直到不含2这个因数(n不能被2整除)后,我们继续除以3这个第二小的质数,把n一直除以3,直到不含2这个因数后(n不能被3整除)一直重复这个过程,直到n=1时,我们就可以结束这个程序了

接下来我们要解决一个问题:我们怎么知道下一个质数是多少?

正常来说,我们可以写一个判断是否为质数的函数(你可能还没学,不要着急,先继续往下看,如果你想学函数,我可以教教你,你可以再文章的最后看到关于函数的知识),像这样:

int pd(long long a){//是质数返回1,不是返回0 
    if(a==0||a==1)return 0;//0和1不是质数,返回0 
	for(int i=2;i<=sqrt(i);i++){
		if(a%i==0){
			return 0;//能被某个数整除,不是质数,返回0 
		}
	}
	return 1;//如果程序运行到这里,说明不是质数,返回1 
}

没有学过函数看这里:

if(a==0||a==1)cout<<"不是质数";//0和1不是质数,输出不是质数
for(int i=2;i<=sqrt(i);i++){
	if(a%i==0){
		cout<<"不是质数";
		return 0;//能被某个数整除,不是质数,输出不是质数
	}
}
cout<<"是质数";//如果程序运行到这里,说明是质数,输出是质数

但是,我们为了代码的简(tou)洁(lan),我们是不会写这种判断是不是质数的东西的,但是,如果我们不写判断质数,要怎么做这道题目呢?

我们看代码:

---------------------------------------------------------------------------------------------------------------------------------

代码在这里:
 

#include<bits/stdc++.h>
using namespace std;
int main(){
	int n,i=2;
	cin>>n;
	cout<<n<<'=';
	for( ; ; ){
		if(n%i==0){//如果可以整除,说明i这个数是n的因数(而且,i保证是质数,保证是质数的原因我写在下面了,往下看) 
			cout<<i;//输出因数i 
			if(n/i==1){
				break;//程序结束,已经把质因数分解完了 
			}else{
				cout<<'*';//否则就是可以继续分解,输出乘号 
			}
			n/=i;//将n除以i,原因看文章的思路部分 
		}else{
			i++;
			/*
			注意看啊,这句i++是代码最重要的地方,我先告诉你,
			i++这句代码,就是增加i,让i变成更大一些的质数
			为什么我能保证,i加1就能找到下一个质数呢?我们知道,
			4不是质数,那么,如果i从3加到了4,那程序会输出4吗?
			仔细思考
			事实上程序不会输出4,只有再n%i==0时才会输出4,而在
			i=2的时候,我们就已经把n除得没有2这个因数了,也就是说,
			因为4有2这个因数,而n已经没有2这个因数,所以n不会整除4,
			同样的道理,不是质数的6、8、9都不会输出 
			*/ 
		}
	}
	return 0;
}

好了,我们已经完美地解决了这个问题,文章结束了

---------------------------------------------------------------------------------------------------------------------------------

拓展:

c++函数教程_ptyz306的博客-CSDN博客

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值