一開始我自己也不知道會0ms
而且還WA很多次~.~
++++++++++++程式碼++++++++++++++
#include <stdio.h>
int k,idxup=0,m;
int main(){
while(scanf("%d",&k)!=EOF)
{ //2跟偶數當作例外處理
if(k==2){printf("2");k/=2;goto L1;}
while(!(k&1))//判斷是否偶數
{k/=2;idxup++;}
if(idxup>1)
{printf("2^%d * ",idxup);idxup=0;}
else if(idxup==1)
{printf("2 * ");idxup=0;}//判斷完畢
for(int i=3;(i*i)<=k;i+=2)//因為i<=sqrt(k) 兩邊同平方 i*i<=k 節省調用時間
{//因為偶數跟2過濾掉,所以只要計算奇數
while(k%i==0)
{k/=i;idxup++;}//計算被除幾次,並記錄次方數
if(idxup>1)//如果次方數等於1,則忽略次方表示
{printf("%d^%d",i,idxup);m=1;}//如果跑過這裡就令m=1
else if(idxup==1)
{if(m==1)printf(" * ");printf("%d * ",i);m=0;}//如果m=1代表前面有數字,必須額外加上 *
idxup=0;//出始化
}
L1:;
if(k!=1)//如果k沒除完代表剩下一個質數
{printf("%d\n",k);}
else
{printf("\n");}
}
return 0;
}
++++++++++++++++++++++++++++++
如果還有更快的方式,跟我分享一下><