给定整数N,求1<=x,y<=N且Gcd(x,y)为素数的
数对(x,y)有多少对.
Description
给定整数N,求1<=x,y<=N且Gcd(x,y)为素数的
数对(x,y)有多少对.
Input
一个整数N
Output
如题
Sample Input
4
Sample Output
4
#include<cstdio>
#include<algorithm>
#include<iostream>
#include<cmath>
#include<cstring>
#include<vector>
#define ll long long
#define N 10000010
using namespace std;
bool check[N+10];
int prime[N];
int mu[N+10];
int tot;
int n;
void Moblus() {
memset(check,0,sizeof check);
mu[1]=1;
tot=0;
for(int i=2; i<N; i++) {
if(!check[i]) {
prime[tot++]=i;
mu[i]=-1;
}
for(int j=0; j<tot; j++) {
if(i*prime[j]>N)break;
check[i*prime[j]]=1;
if(i%prime[j]==0) {
mu[i*prime[j]]=0;
break;
} else
mu[i*prime[j]]=-mu[i];
}
}
}
int main() {
Moblus();
while(scanf("%d",&n)!=EOF) {
ll ans=0;
for(int i=0; i<tot; i++) {
int x=n/prime[i];
if(x==0)break;
for(int j=1; j<=x; j++)
ans+=(ll)mu[j]*(x/j)*(x/j);
}
printf("%lld\n",ans);
}
return 0;
}
原文地址:http://blog.csdn.net/acm_baihuzi/article/details/45367285