2012年5月23日 星期三

C# -> 質因數分解

通常,分解質因數,我們會先建立一張質數表。
然後,再從最小的質數 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 ;
}

沒有留言:

張貼留言