货物摆放,暴力解法。
1.求出a的所有因子
2.从中依次挑出两个,判断是否可以三个相乘==a (a/(b*c)==0)
3.将可能的组合放入set集合中,由于集合会自动去重,所以最终set的size就是答案
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
ll a=2021041820210418;
int main()
{
vector<ll>V;
V.push_back(1);
for(ll i=2;i*i<=a;i++)
{
if(a%i == 0)
{
V.push_back(i);
if(i != a/i)V.push_back(a/i);
}
}
V.push_back(a);
int n=V.size();
set<vector<ll>>s;
for(int i=0;i<n;i++)
{
for(int j=0;j<n;j++)
{
vector<ll>temp;
ll pl=V[i]*V[j];
if(a%pl)continue;
temp.push_back(V[i]);
temp.push_back(V[j]);
temp.push_back(a/pl);
s.insert(temp);
}
}
cout<<s.size();
}