分解质因数,输入一个整数n,输出n=x1x2x3……,请大家帮忙看看为什么这个程序EmptyOutput呢?
感谢各位佬!
(输出(i+2)那里还没完善,然后打算之后写if把最后一个去掉,n=也还没写)
#include
using namespace std;
int q(int m,int k,int y)
{
if(y%m==0) {k++;q(y/m,k,y);}//用k记录n可以被b[i]整除的次数;不能整除后,把k赋给b[i] ,得到一个数组的值为一个质因数乘的次数,角标为该质因数-2的数组b[i]
else {m=k;return m;}
}
void prime(int n)
{
int a[100000]={0};
int b[100000]={0};
for(int i=2;iint num=0;
for(int j=2;jif(i%j==0) num++;
}
if(num==0) a[i-2]=i;
} //先找出小于n的所有质数,存入一个数组,得到由质数和0组成的数组a[i]
for(int i=0;i2;i++) //判断a[i]里的质数是不是n的因数
{
if(a[i]==0) continue; //跳过值为0的b[i]
else
{
if(n%a[i]==0) b[i]=a[i];//把是n的因数的质数存进b[i] ,得到的数组b[i]中是0和质因数
}
}
for(int i=0;i2;i++)
{
int x=0;
if(b[i]!=0) q(b[i],x,n);//调用函数q
}
for(int i=0;i<=n-2;i++)//循环完成后b[i]的值为一个质因数乘的次数,i角标为该质因数-2,输出n个(i+2)*
{
if(b[i]!=0)
{
for(int j=1;j<=b[i];j++)
{
printf("(i+2)*");
}
}
}
}
int main()
{
int n=0;
cin>>n;
prime(n);
return 0;
}
//分解质因数
#include<iostream>
using namespace std;
void prim(int m);
int main()
{
int n;
cout << "please input a num:" << endl;
cin >> n;
prim(n);
return 0;
}
//分解质因数函数
void prim(int m) //m为目标数值
{
int i = 2; //从最小质数2开始
while(i < m) //满足质数作为除数小于商值
{
if(m % i == 0) //满足可整除目标数的质数
{
cout << i << "*"; //输出一个因数
m /= i; // 更新商值赋给m
}
else
i++; //未整除时寻找下一除数
}
cout << m; //最后一个除数
}