將一個正整數分解質因數。例如:輸入90,打印出90=2*3*3*5。
初級算法:
-
- #include<stdio.h>
-
- #include<stdlib.h>
- #include<math.h>
- int main()
- {
- int n,i;
- scanf("%d",&n);
- printf("%d=",n);
- for(i=2;i<=sqrt(n);i++)
- {
- if(n%i==0)
- {
- n/=i;
- printf("%d*",i--);
- }
- }
- printf("%d\n",n);
- system("pause");
- return 0;
- }
改進版:
- #include<stdio.h>
- #include<stdlib.h>
- #include<math.h>
- int main()
- {
- int n,i;
- scanf("%d",&n);
- printf("%d=",n);
- while(n%2==0){
- printf("%d*",2);
- n/=2;
- }
- for(i=3;i<=sqrt(n);i+=2)
- {
- if(n%i==0)
- {
- n/=i;
- printf("%d*",i);
- i-=2;
- }
- }
- printf("%d\n",n);
-
- system("pause");
- return 0;
- }
因為在所以的質數中只有2是偶數外,其他的質數都是奇數。所以i可以一次+2跳過所有的偶數。不過2要特別處理。
待續未完。相信還有更好的算法。