质因数分解
题目描述
Description 任意一个正整数可以分解成唯一的质因数的乘积,给出正整数,请计算出它的质因数分解式。
输入
每行一个正整数2<=n<=10^8。
输出
每行输出一个对应结果。使用”^”表示幂,”*”表示乘,质因子应该按从小到大的顺序输出,如果某一个质因子只有一次,那么就不要输出它的幂。
Sample Input
2
6
36
Sample Output
2
2*3
2^2*3^2
解题思路
思路很简单,从i=2到 i*i<=n循环,当遇到一个n%i=0的情况,就算是找到了一个质因数。注意最后n不是0的情况。比如说 求6得质因子个数,当i*i<=6时结束循环,此时i一定是小于3的,按照我们的分析 6应该包含2个质因子(2和3),所以当循环完毕时,要判断一下 n此时的值,若为1 说明已经把质因数找完,若不为1,那么剩下的一定是个质数。
这个题还要注意输出的问题,使用”^”表示幂,”*”表示乘。具体请看代码。
代码如下
我使用an这个变量在存储找到的不同质因数的个数,很显然,第一个质因数前面是不用输出“ * ”的,用count这个变量储存每个质因数的个数,用来表示幂。
#include<bits/stdc++.h>
using namespace std;
int main() {
int n;
while(scanf("%d",&n)!=EOF) {
int an = 0;
for(int i = 2; i*i<= n; i++) {
if(n%i==0) {
int count = 0;
while(n%i==0) {
count++;
n /= i;
}
if(an!=0) printf("*");
if(count!=1) printf("%d^%d",i,count);
else if(count==1) printf("%d",i);
an++;
}
}
if(an==0) printf("%d\n",n);
else {
if(n!=1) printf("*%d\n",n);
else if(n==1) printf("\n");
}
}
return 0;
}