John M. Pollard快速分解质因数法

来源:互联网 发布:比较可靠的网络兼职 编辑:程序博客网 时间:2024/05/16 07:08

1975年,John M. Pollard提出了一种新的算法,算法时间复杂度为O(n^1/4)。
求一个数分解质因数,要从最小的质数除起,一直除到结果为质数为止。分解质因数的算式的叫 短除法,和除法的性质差不多,还可以用来求多个个数的公因式:

  如24 
  2┖24(是短除法的符号) 
  2┖12 
  2┖6 
  3——3是质数,结束 
  得出24=2×2×2×3=2^3×3(m^n=m的n次方) 
  再如105 
  3┖105 
  5┖35 
  ----7——7是质数,结束 
  得出105=3×5×7

John M. Pollard算法思想就是短除法用的思想。

#include<stdio.h>int main(){int num = 24;//需要分解的数,根据数的大小选择类型int i = 2;for(i=2; i<=num/2; i++){while(num >= i){if(num % i == 0)//能被整除{printf("%d * ", i);//输出num /= i;//模仿短除法}elsebreak;}}
printf("%d\n", num);
return 0;}
输出:2 * 2 * 2 * 3

基本思想如上所述,具体程序需要自己改代码,比如选择数据类型,可能是long long类型,最后输出也要控制,比如num为8的时候会输出2 * 2 * 2 * 1,所以最后还得对num进行判断,如果是1则不要输出了

最后比较完整的程序:

#include<stdio.h>int main(){long long num;printf("please input a number:");scanf("%lld", &num);int i = 2;printf("%lld = ", num);for(i=2; i<=num/2; i++){while(num >= i){if(num % i == 0)//能被整除{if(num / i == 1)printf("%d\n", i);elseprintf("%d * ", i);num /= i;//模仿短除法}elsebreak;}}if(num != 1)printf("%lld\n", num);return 0;}

原创粉丝点击