Description | ||
任意一个正整数可以分解成唯一的质因数的乘积,给出正整数,请计算出它的质因数分解式。 输入 每行一个正整数2<=n<=10^8。 输出 每行输出一个对应结果。使用”^”表示幂,”*”表示乘,质因子应该按从小到大的顺序输出,如果某一个质因子只有一次,那么就不要输出它的幂。 Sample Input 2 6 36 Sample Output 2 2*3 2^2*3^2 |
思路分析:这道题应该抓住第一个质因数一定小于第二个质因数,所以,我们应该先试除以第一个质因数,如果能除尽,然后就继续除,统计除了多少个第一个质因数,然后一旦除不尽了,就试着找第二个质因数,再次统计,如果为1就代表除完了
#include <stdio.h>
#include <iostream>
using namespace::std;
int main()
{
//分解质因数且求其指数无非就是记录求了我们除了多少个质数1,然后对其剩下的数,再除质数2,除了多少个质数2,这样这几个个数就是我们的指数
int n;
while (scanf("%d", &n)!=EOF) {
int i, j;
//思路分析。首先,分解质因数针对的是合数,只有能被整除的数才可分解质因数,因此我们首先目的就是看下这个数是否能被整除
for (i = 2; i * i <= n; i++) {
if (n % i == 0) {//关于每个指数的位置,不难发现,对于24来说,2的三次方*3才是24,也就是说,一般就先考虑最小的那个位置的质数
for (j = 0; n % i == 0; j++) {//j就是我们的指数,除了3个2之后,2除尽了
n /= i;
}//注意计算机不能一下子就拆分出两个质数,只能一个一个的来拆分,先搞定左边质数以及指数,再搞定右边质数以及指数
//里面的for循环完成后,就代表一个质数以及指数完成了!对剩下的数再进行下一个质数以及指数的运算
if (j < 2)
{
printf("%d", i);
}
else printf("%d^%d", i, j);
if (n != 1)printf("*");
if (n == 1)printf("\n");
}
}
if(n!=1)
printf("%d\n", n);
}
}