Given any positive integer N, you are supposed to find all of its prime factors, and write them in the format N = p1^k1 * p2^k2 *…*pm^km.
Input Specification:
Each input file contains one test case which gives a positive integer N in the range of long int.
Output Specification:
Factor N in the format N = p1^k1 * p2^k2 *…*pm^km, where pi’s are prime factors of N in increasing order, and the exponent ki is the number of pi – hence when there is only one pi, ki is 1 and must NOT be printed out.
Sample Input:
97532468
Sample Output:
97532468=2^211171011291
思路:
- 从prime=2开始,判断是否能被n整除,如果可以的话一直除,直到无法整除,记录prime以及prime出现的次数,按格式输出
- 无法整除时,prime++;直到可以整除,循环此过程
注意1=1的形式需要另外考虑
代码:
#include<cstdio>
int main(){
long long n,t=0,prime=2,count=0;
scanf("%lld",&n);
printf("%lld=",n);
if(n==1) printf("1");
while(n!=1){
while(n%prime==0){//能除当前这个素数
n/=prime;
count++;
}
if(t!=0) printf("*");
if(count>1){
printf("%lld^%lld",prime,count);
t++;
}else if(count==1){
printf("%lld",prime);
t++;
}
//因为每个合数都可以由素数组成,因为前面已经尽可能多的除了素数,所以,得到的就是一个素数,不是合数
//这里必须加n!=1,如果没有这个条件,当前面已经完全分解好质因数时,这里会陷入死循环
while(n%prime!=0 &&n!=1) prime++;
count=0;
}
return 0;
}