John M. Pollard快速分解質因數法
阿新 • • 發佈:2019-02-10
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;//模仿短除法 } else break; } }
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); else printf("%d * ", i); num /= i;//模仿短除法 } else break; } } if(num != 1) printf("%lld\n", num); return 0; }