题目描述
这一天,牛牛与 牛魔王相遇了――然而这并不在 牛牛期望之中。
牛魔王不出意料又给 牛牛一道看似很难的题目:求有多少个不同的正整数三元组
满足
,且
。
牛牛并不会做,你能略施援手吗?
当两个三元组
满足
或
或
时它们被认为是不同的。
输入描述:
第一行,一个正整数 n。
保证 。
输出描述:
输出一行,一个整数表示答案。
输入
1
输出
1
说明
(1,1,4)
题解
-
两边平方,得 ,显然仅当 i,ji,j 都是整数且 为完全平方数时才会对应一个符合条件的 。
-
枚举 中所有的完全平方数(完全平方数可以表示为 ,只需要枚举 ),再枚举这个完全平方数的因数,统计答案。
-
枚举完全平方数 枚举因数,时间复杂度 ,可以进一步优化。
AC-Code
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
int main() {
int n; cin >> n; ll ans = 0;
for (int i = 1; i * i <= n; ++i) {
int num = 0;
for (int j = 1; j <= i; ++j)
if (i * i % j == 0) ans += 2;
--ans;
}
cout << ans << endl;
}