#9701: 0ms分享><


a12345678665 (marktohark)

學校 : 國立虎尾科技大學
編號 : 48059
來源 : [49.213.194.197]
最後登入時間 :
2019-07-11 10:50:36
a010. 因數分解 | From: [123.110.238.74] | 發表日期 : 2015-03-08 12:23

一開始我自己也不知道會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;

}

++++++++++++++++++++++++++++++

如果還有更快的方式,跟我分享一下>< 

 
ZeroJudge Forum