歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> C語言經典算法:如何較快的分解質因數

C語言經典算法:如何較快的分解質因數

日期:2017/3/1 10:26:47   编辑:Linux編程

將一個正整數分解質因數。例如:輸入90,打印出90=2*3*3*5。

初級算法:

  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. #include<math.h>
  4. int main()
  5. {
  6. int n,i;
  7. scanf("%d",&n);
  8. printf("%d=",n);
  9. for(i=2;i<=sqrt(n);i++)
  10. {
  11. if(n%i==0)
  12. {
  13. n/=i;
  14. printf("%d*",i--);
  15. }
  16. }
  17. printf("%d\n",n);
  18. system("pause");
  19. return 0;
  20. }

改進版:

  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. #include<math.h>
  4. int main()
  5. {
  6. int n,i;
  7. scanf("%d",&n);
  8. printf("%d=",n);
  9. while(n%2==0){
  10. printf("%d*",2);
  11. n/=2;
  12. }
  13. for(i=3;i<=sqrt(n);i+=2)
  14. {
  15. if(n%i==0)
  16. {
  17. n/=i;
  18. printf("%d*",i);
  19. i-=2;
  20. }
  21. }
  22. printf("%d\n",n);
  23. system("pause");
  24. return 0;
  25. }

因為在所以的質數中只有2是偶數外,其他的質數都是奇數。所以i可以一次+2跳過所有的偶數。不過2要特別處理。

待續未完。相信還有更好的算法。

Copyright © Linux教程網 All Rights Reserved