Description
任意输入一正整数N,求出它的所有质因子。如:10=(2 5);20=(2 2 5)。
Input
输入只有一行,包括1个整数。
Output
输出只有一行.为你分解的质因子,数字间用一个空格分开。
Sample Input
36
Sample Output
2 2 3 3
算法思想:ollard Rho因数分解
1975年,John M. Pollard提出了因数分解的方法,Pollard Rho快速因数分解。该算法时间复杂度为O(n^(1/4))。
分解质因数代码:
将一个正整数分解质因数。例如:输入36打印出36=2*2*3*3*。
程序分析:对n进行分解质因数,应先找到一个最小的质数k,然后按下述步骤完成:
(1)如果这个质数恰等于n,则说明分解质因数的过程已经结束,打印出即可。
(2)如果n<>k,但n能被k整除,则应打印出k的值,并用n除以k的商,作为新的正整数你n,
重复执行第一步。
(3)如果n不能被k整除,则用k+1作为k的值,重复执行第一步。
程序分析:对n进行分解质因数,应先找到一个最小的质数k,然后按下述步骤完成:
(1)如果这个质数恰等于n,则说明分解质因数的过程已经结束,打印出即可。
(2)如果n<>k,但n能被k整除,则应打印出k的值,并用n除以k的商,作为新的正整数你n,
重复执行第一步。
(3)如果n不能被k整除,则用k+1作为k的值,重复执行第一步。
问题解决方案源代码如下:
<span style="font-family:Times New Roman;">#include<cstdio>
int main(){
int num,i;
scanf("%d",&num);
for(i=2;i<=num;i++){
while(num!=i){///当质数不相等时候循环
if(0==num%i){///这个数能够被整除
printf("%d ",i);
num /= i;
}else{
break;
}
}
}
printf("%d",num);
///最后一个数字就是最后一个或者开始相等的一个
return 0;
}</span><span style="font-family:Microsoft YaHei;">
</span>