约数个数例题
给定一个整数 n,求有多少正整数数对 (x,y 满足 1 x + 1 y = 1 n ! \frac1x+\frac1y=\frac1n! x1+y1=n1!
输入格式
一个整数 n。
输出格式
一个整数,表示满足条件的数对数量。
答案对 109+7取模。
数据范围
1≤n≤106
题解
#include <iostream>
const int MAX = 1e6 + 100;
const int MOD = 1e9 + 7;
typedef long long ll;
bool is_pri[MAX];
int pri[MAX];
int cnt = 0;
void prime() {
is_pri[0] = is_pri[1] = 1;
for(int i = 2; i <= MAX; i++) {
if(is_pri[i] == 0) pri[cnt++] = i;
for(int j = 0; i * pri[j] <= MAX; j++) {
is_pri[i * pri[j]] = 1;
if(i % pri[j] == 0) break;
}
}
}
int main() {
prime();
ll n;
scanf("%lld", &n);
ll ans = 1;
for(int i = 0; i < cnt; i++) {
ll tot = 0;
for(ll j = pri[i]; j <= n; j *= pri[i]) {//j一定要是ll
tot += n / j;
}
ans = ans * (2 * tot + 1) % MOD;
}
printf("%lld\n", ans);
}