给定一个整数 n,求有多少正整数数对 (x,y) 满足 1/x+1/y=1/n!。
一个整数 n。
一个整数,表示满足条件的数对数量。
答案对 1e9+7取模。
1≤n≤106
2
3
共有三个数对 (x,y)满足条件,分别是 (3,6),(4,4),(6,3)。

- #include
-
- using namespace std;
-
- typedef long long LL;
-
- const int N = 1e6 + 10, mod = 1e9 + 7;
- int primes[N], cnt;
- bool st[N];
-
- //筛质数模板
- void init(int n)
- {
- for(int i = 2; i <= n; i ++)
- {
- if(!st[i]) primes[cnt ++] = i;
-
- for(int j = 0; primes[j] * i <= n; j ++)
- {
- st[primes[j] * i] = true;
- if(i % primes[j] == 0) break;
- }
- }
- }
-
- int main()
- {
- int n;
- cin >> n;
-
- init(n);
-
- LL res = 1;
- for(int i = 0; i < cnt; i ++)
- {
- int p = primes[i];
-
- LL s = 0;//该质因数的次数
- for(int j = n; j; j /= p) s = (s + j / p) % mod;
-
- res = res * (2 * s + 1) % mod;
- }
-
- cout << res;
-
- return 0;
- }