思路:
原式子等价于(x-n)*(y-n) = n^2,即原题求n^2的因数个数,分解累加即可
————事实证明,敲对模板很重要,我线性筛少了个==0,结果效率变成了埃式筛的效率,只能过九个点。加上==0后,AC了!!!
#include<cstdio> #include<iostream> #include<cmath> using namespace std; const int mod = 1e9 + 7; const int maxn = 1e6 + 7; int n; long long c[maxn]; int isnprime[maxn]; int prime[maxn]; long long ans = 1; inline void findpri(){ for(int i = 2; i <= n; ++i){ if(!isnprime[i]) prime[++prime[0]] = i; for(int j = 1; j <= prime[0] && prime[j] < n/i; ++j){ isnprime[i * prime[j]] = 1; if(i % prime[j] == 0) break; } } } inline void divide(int x){ for(int i = 1; prime[i] * prime[i] <= x; ++i){ while(x % prime[i] == 0) x /= prime[i], c[prime[i]]++; } if(x != 1) c[x]++; } int main(void) { cin >> n; findpri(); for(int i = 1; i <= n; ++i) divide(i); for(int i = 1; i <= prime[0]; ++i) ans = (ans * (c[prime[i]] << 1 | 1)) % mod; cout << ans << endl; return 0; }