问题描述
给定一个正整数n,尝试对其分解质因数
输入格式
仅一行,一个正整数,表示待分解的质因数
输出格式
仅一行,从小到大依次输出其质因数,相邻的数用空格隔开
样例输入
100
样例输出
2 2 5 5
数据规模和约定
n<=2147483647
思路:
- n=1时,质因数为1.
- n>1时,一次判断i(2~sqrt(n))是否能除尽,能则打印i并重置i=1,反之继续往后判断。
- 当n不能被除时,n就是最后的质因数。
#include<stdio.h>
#include<math.h>
int main(){
int n,i;
scanf("%d",&n);
//当n=1时
if(n==1){
printf("%d\n",n);
}else{
//当n>1时
for(i=2;i<=sqrt(n);i++){
if(n%i==0){
//当i能除尽时,打印i,重新初始n,重新赋值i=1.
printf("%d ",i);
n/=i;
i=1;
}
}
if(n){
//当n不能被除时,n就是最后的质因数
printf("%d\n",n);
}
}
return 0;
}
结果:
100
2 2 5 5
--------------------------------
Process exited after 2.25 seconds with return value 0
请按任意键继续. . .