问题描述:
把任意一个正整数分解成几个素因子的幂的乘积
程序实现:
#include <iostream>
#include <math.h>#include <conio.h>
using namespace std;
// 判断一个数是否是素数
bool IsPrimeNum(int number)
{
bool bIsPrimeNum = true;
for (int i = int(sqrt((double)number));i>1;i--)
{
if((number%i)==0)
{
bIsPrimeNum = false;
}
}
return bIsPrimeNum;
}
// 分解
void DivideNum(int number, int a[100], int b[100])
{
int k = 0, j = 0;
int flag = 0;
if(!IsPrimeNum(number))
{
for (int i = int(sqrt(number));i>1;i--)
{
if((number%i)==0)
{
DivideNum(i, a, b); // 对除数进行分解
number = number/i;
DivideNum(number, a, b); // 对商进行分解
break;
}
}
}
else
{
j = 0;
flag = 0;
while (a[j] != 0)
{
if (a[j] == number)
{
b[j] = b[j] + 1;
flag = 1;
}
j++;
}
if (flag == 0)
{
a[j] = number;
b[j] = 1;
}
//cout<<number<<" ";
}
}
int main(void)
{
int prime[100] = {0}, power[100] = {0};
int number;
int i = 0;
cout<<"please input a number: ";
cin>>number;
DivideNum(number, prime, power);
cout << endl << endl << number << "分解后的素因子的幂乘积为: ";
while (prime[i] != 0)
{
cout << prime[i] << "*<" << power[i] << "> ";
i++;
}
cout<<endl;
getch();
return 0;
}