描述
功能:输入一个正整数,按照从小到大的顺序输出它的所有质因子(重复的也要列举)(如180的质因子为2 2 3 3 5 )
数据范围:1≤n≤2×109+14
输入描述:
输入一个整数
输出描述:
按照从小到大的顺序输出它的所有质数的因子,以空格隔开。
示例1
输入:180
输出:2 2 3 3 5
不仔细容易漏判断条件:
1.数据范围给的比较大,需要给输入数long int
2.如果按照180的分解思路,应该给一个i,从i=2开始,num(180)开始除i,如果去余为零,则num/=i,然后每次取余为零,则输出一个i;
矛盾在于,for循环中的判断条件,肯定有类似i<num的语句,而num在循环中是不断减小的。所以在这里需要用一个数x把num的初始值取出来;
3.碰到质数,循环走不通,无输出值,需最后输出本身。
#include <stdio.h>
int main()
{
int count=0,i=2;
long int num=0;
scanf("%ld",&num);
long int x = num;
for(i=2;i*i<=x;i++)
{
while (num%i==0)
{
num/=i;
printf("%d ",i);
}
}
if(num>1)
{
printf("%ld",num);
}
return 0;
}