將一個整數分解質因數並輸出

    將一個整數進行質因數分解並輸出。以100爲例,如100=2*2*5*5。
    實現代碼:
   
#include "stdafx.h"
#include <stdio.h>
#include <math.h>
#include <conio.h>

bool Is_Prime_Number(int num)
{
  int i,k;
  k=sqrt((double)num);
  for(i=2;i<=k;++i)
  {
    if(num%i==0)
    {
      return false; //非素數
      break;
    }
  }
  if(i>k)
  {
    return true; //素數
  }
}

void Prime_Numbers(int num,int *prime,int *len)
{//獲得num的質因數,並保存到prime所指向的空間
  int i;
  *len=0;
  if(num==1)
  {
    printf("1 is not a prime number.\n");
  }
  else if(Is_Prime_Number(num))
  {
    *prime=num;
  }
  else
  {
    for(i=2;i<=num;++i)
    {
      if(Is_Prime_Number(i) && num%i==0) //獲得小於等於num且能被num整除的質數
      {
        *prime=i;
        prime++;
        (*len)++;
      }
    }
  }    
}

void Decompose_PrimeFactors(int num)
{
  int prime[50];             //用來保存num的質因數
  int counts[50]={0}; //用來保存num的質因數出現的次數
  int length;                 //用來保存num的質因數個數
  int i,j;
  int pri_num=num;     //原始數據,輸出時用到
  Prime_Numbers(num,prime,&length);
  for(i=0;i<length;++i)
  {
    while(num%prime[i]==0)
    {//利用短除法對合數num分解質因數
      num/=prime[i];
      counts[i]++;
    }
  }
  printf("%d=",pri_num);
  for(i=0;i<length;++i)
  {
    for(j=0;j<counts[i];j++)
    {
      printf("%d*",prime[i]);
    }
  }
  printf("\b ");//消除最後的*
}

int _tmain(int argc, _TCHAR* argv[])
{
  Decompose_PrimeFactors(100);
  printf("\n");
  getch();
  return 0;
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章