将一个整数进行质因数分解并输出。以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;
}
#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;
}
转载于:https://blog.51cto.com/toigel/600287