从题中就能知道是求三个因数
但是暴力搜索需要很多的时间,基本的思路就是搞清楚三个因数之间的关系以及排序问题
具体解释都在代码注释中
#include<iostream>
#include<algorithm>
using namespace std;
typedef long long ll;
const ll N = 2021041820210418;
int main()
{
ll number = 0; // 计数器
for(ll a = 1 ; a <= sqrt(N) ; a++) // 第一个数是a
if(N%a == 0){ // 要求能够除尽
ll t = N/a ; // 第二第三个数的乘积是t
for(ll b = 1 ; b <= sqrt(t) ; b++) // 第二个数是b
if(t%b == 0){
ll c = t/b; // 第二个数是c
if(c >= b && b >= a){ // 规定必须是递增序列,然后进行排列
if(c != b && b != a) number += 6; // 三个数都不一样,全排列,一共6种情况
else if((c == b && b != a) || (c != b && b == a)) number += 3;// 三个数中有两个不一样,全排列,一共3种情况
else number++; // 三个数都一样,一种情况
}
}
}
cout << number;
return 0;
}
?最终答案:2430
|