将一个整数分解质因数并输出

    将一个整数进行质因数分解并输出。以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;
}

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