250pt....
500pt
题意:给n和m,a,b满足(1 <= a <= n, 1 <= b <= m),SSR(a, b) = (sqrt(a) + sqrt(b))^2为整数,其实就是sqrt(a*b)为整数。
总体思路是:从1...n枚举a,看m中有多少个和a组合可以构成平方数的。
先把a因式分解,a = k1p1*k2p2*...*kxpx 找到所有pi (1 <= i <= x)中是奇数的质因子,因为幂为偶数的质因子开放的结果一定是整数,所以不用考虑偶数的情况。剩下这些设幂为奇数的质因子的积为W,比如a = 2^3*5^3*7^2, W = 2^3*5^3;要使sqrt(a*b)为整数,则a*b要试W变成W*W,也就是b中也要贡献若干个W(在保证不大于m的情况下),贡献多少个呢?W,4*W,16*W都可以,也就是说W的倍数必须要是平方数,a*b = (a里面幂为偶数的质因子)*W*W*x x为平方数。
class TheSquareRootDilemma { public: int countPairs(int N, int M) { int t, i, j, ans = 0; for(i = 1; i <= N; ++i) { t = i; for(j = 2; j*j <= t; ++j) { while(t%(j*j) == 0) t /= (j*j); } for(j = 1; ; ++j) { if(t*j*j > M) {ans += j - 1; break;} } } return ans; } };