给定整数N,求1<=x,y<=N且Gcd(x,y)为素数的
数对(x,y)有多少对.
标签:前缀和 一个 sea mes 重复 php oid col href
给定整数N,求1<=x,y<=N且Gcd(x,y)为素数的
数对(x,y)有多少对.
一个整数N
如题
hint
对于样例(2,2),(2,4),(3,3),(4,2)
1<=N<=10^7
#include<bits/stdc++.h>
using namespace std;
#define ll long long
const int maxn = 1e7 + 5;
int n, pri[maxn];
ll f[maxn];
bool Notpri[maxn]; int tot = 0;
void pre(int x) {
f[1] = 1;
for (int i = 2; i <= n; ++i) {
if(!Notpri[i]) pri[++tot] = i, f[i] = i - 1;
for (int j = 1; j <= tot && i * pri[j] <= n; ++j) {
Notpri[i * pri[j]] = true;
if(i % pri[j] == 0) {
f[i * pri[j]] = f[i] * pri[j];
break;
} f[i * pri[j]] = f[i] * (pri[j] - 1);
}
}
for (int i = 1; i <= n; ++i) f[i] += f[i - 1];
}
int main() {
scanf("%d", &n);
pre(n);
ll ans = 0;
for (int i = 1; i <= tot; ++i) {
ans += f[n / pri[i]] * 2; ans--;
} printf("%lld\n", ans);
return 0;
}
标签:前缀和 一个 sea mes 重复 php oid col href
原文地址:https://www.cnblogs.com/oi-forever/p/8975661.html