题目的意思就是,给我们一个n,我们将n分解为3个数的乘积。且4=1*2*2,和4=2*1*2视为不同的方案,即排列,不是组合。
问一共有多少用不同的分解方式
这个题需要我们看一下,n有什么性质
发现n=a*b*c,a,b,c必然都是n的约数
所以这个题可以先求一下n的所有约数,用vector来存储
然后三个for循环暴力来写,如果n=a*b*c ,ans++
如何求一个数的约数:Acwing--试除法求约数_wowon~的博客-CSDN博客
答案:2430
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
vector<ll>v;
ll n;
int main()
{
n=2021041820210418;
for(int i=1;i<=n/i;i++)
{
if(n%i==0){v.push_back(i);
if(i!=n/i)v.push_back(n/i);
}
}
ll ans=0;
for(int a=0;a<v.size();a++)
{
for(int b=0;b<v.size();b++)
{
for(int c=0;c<v.size();c++)
{
if(v[a]*v[b]*v[c]==n)
ans++;
}
}
}
cout<<ans<<endl;
return 0;
}