我们知道一个数除了1以外,它本身的因子数目一定大于等于二(因子为1和它本身,废话啦)
const int maxn=1e7+50;
//打表计算因子数目更快
int yinzi[maxn];
void getsum()
{
int i,j;
for(i=1;i<=maxn;i++)
{
if(i==1)
yinzi[i]=1;
else
yinzi[i]=2;
}
for(i=2;i*i<=maxn;i++)
{
for(j=i;j*i<=maxn;j++)
{
if(i==j)//因为之前把自己作为因子已经算一次了
sum[i*j]+=1;
else
sum[i*j]+=2;
}
}
}
//这个是直接计算因子数目的模板
LL yinzi(LL n)
{
LL ans=2;
for (LL i=2; i<=sqrt(n);i++)
{
if (n%i== 0)
{
if(n%i==sqrt(n)&&n/i==i)
ans++;
else
ans+=2;
}
}
return ans;
}
如果是去计算质因子数目 也是差不多的操作
#include<iostream>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<cstdio>
#include<vector>
using namespace std;
const int mod=1e9+7;
typedef long long ll;
ll fac[1010];
void findFactor(ll x)//求x的质因子
{
ll s=x;
fac[0]=0;//表示质因子的个数
for(ll i=2;i*i<=s;i++)
{
if(x%i==0)
{
fac[++fac[0]]=i;
while(x%i==0)//一个拥有质因子的数字是由质因子连乘得到的
x/=i;
}
}
if(x>1)
fac[++fac[0]]=x;
}
int main()
{
ll a,b,n;
cin>>n;
findFactor(n);
for(int i=1;i<=fac[0];i++)
printf("%lld\n",fac[i]);
}