注意点:一定不要忘记调用函数,以及本题需要特判1;
#include<cstdio>
#include<iostream>
#include<cmath>
using namespace std;
const int maxn=1000100;
bool hashTable[maxn]={false};
int a[maxn],count1=0;
struct node
{
int factor;
int cnt;
}num[maxn];
void P()
{
for (int i=2;i<maxn;i++)
{
if(hashTable[i]==false)
{
a[count1++]=i;
for (int j=i;j<maxn;j=j+i)
{
hashTable[j]=true;
}
}
}
}
int main()
{
int n,count2=0,i=0,temp;
cin>>n;
printf("%d=",n);
if(n==1)
{
printf("1");
return 0;
}
P();
temp=(int)sqrt(1.0*n);
while (n>0&&i<=temp)
{
if(n%a[i]==0)
{
num[count2].factor=a[i];
num[count2].cnt=0;
while(n%a[i]==0)
{
num[count2].cnt++;
n=n/a[i];
}
count2++;
}
i++;
}
if(n>1)
{
num[count2++].factor=n;
num[count2].cnt=1;
}
for (int i=0;i<count2;i++)
{
printf("%d",num[i].factor);
if(num[i].cnt>1)
printf("^%d",num[i].cnt);
if(i!=count2-1)
printf("*");
}
}
本文介绍了一种高效的质因数分解算法,并通过C++代码实现了该算法。文章首先使用筛法预处理出所有小于等于maxn的质数,然后利用这些质数对任意整数进行分解,得到其所有质因数及其指数。
737

被折叠的 条评论
为什么被折叠?



