给两个数n,m,求出a*b是完全平方数的总数,其中,a∈[1,n],b∈[1,m];
才疏学浅,只会最简单的Math.sqrt两个循环暴力破解,过了60%。
下面是某大佬的题解,供参考:
#include <bits/stdc++.h>
using namespace std;
int solve(int N, int M) {
int res = 0;
for (int a = 1; a <= N; a++) {
int s = 1;
//找到最大的s,让a是s*s的倍数
// O(sqrt(N))
for (int x = 2; x <= a / x; x++) {
if (a % (x * x) == 0) {
s = x * x;
}
}
int r = a / s;
//a * r 是一个完全平方数
//如果b = r * c, 我们要让a * b是一个平方数,需要c也是一个完全平方数
// O(sqrt(M))
for (int y = 1; y * y * r <= M; y++) {
//(a, r * r * y)是一个合法的解
res++;
}
}
return res;
}
int main() {
int n, m;
scanf("%d%d", &n, &m);
printf("%d\n", solve(n, m));
return 0;
}