题解 | #质数因子#
质数因子
http://www.nowcoder.com/practice/196534628ca6490ebce2e336b47b3607
解题思路:
- 质数:满足质数(>1的自然数且不能被1和本身以外的自然数整除),则i从2开始;
- 从小到大且重复列举:i++;
- 质因数:(假设输入被除数为num)
- 比被除数小:i<num
- 商大于除数i:注意寻找除数时,最大除数应满足i<=num^0.5,否则商必然小于当前除数
- 执行过程:
- 获取因数:每次做除法后,将整除的商作为下一次被除数num,则num/=i
- 保证重复整除:while循环判断num%i==0
- 输出较大除数:for循环结束后,加入判断if(n-1),执行若num值为1,则表示已输出所有质因数,否则直接输出该数为质因数
- 准备下次接收:结尾换行,准备下次接收。
#include<stdio.h>
int main()
{
int num = 0;
while (~scanf("%d", &num)) //有输入时进入该while循环
{
int tmp = num;
for (int i = 2; i <= sqrt(tmp) && i <= num; i++)
{
while (num % i == 0) //用if同个质因数只除1次,则用while
{
printf("%d ", i); //输出重复质因子
num /= i;
}
}
if (num - 1) //i > sqrt(tmp)时输出,i <= sqrt(tmp)时while已输出此处不输出
{
printf("%d ", num); //输出> sqrt(tmp)的质因子
}
putchar('\n');
}
return 0;
}