通常,分解質因數,我們會先建立一張質數表。
然後,再從最小的質數 2 開始,逐個判斷是否可以整除該數。
C# code :
#include<stdio.h>
#include<stdlib.h>
int pri[1000],co[1000] ; //pri[i] 為第i小的質數,co[i] 為n之中有多少 pri[i]次方
int n=0,i=0,j=0,k=0,pass=0,to=0,f=0 ;
int main()
{
//質數表
pri[0]=2 ;
pri[1]=3 ;
to=2 ;
for(i=5;i<=1000;i+=2){
pass=1 ;
for(j=0;j<to;j++){
if(!(i%pri[j])){pass=0;break;}
}
if(pass){
pri[to++]=i ;
}
}
//質因數分解
while(scanf("%d",&n)!=EOF){
for(i=0;i<to;i++)co[i]=0 ;
for(i=0;i<to;i++){
while(!(n%pri[i])){ //判斷某個質數是否可以整除 n ,直到不能在除為止。
co[i]+=1 ;
n/=pri[i] ;
}
}
f=0 ;
for(i=0;i<to;i++){ //列印
if(co[i]){
if(f)printf(" * ") ;
else f=1 ;
if(co[i]==1){
printf("%d",pri[i]) ;
}
else {
printf("%d^%d",pri[i],co[i]) ;
}
}
}
if(n>1){
if(f)printf(" * ") ;
printf("%d\n",n) ;
}
else printf("\n") ;
}
return 0 ;
}
沒有留言:
張貼留言