您的位置:首页 > 其它

Gcd [Bzoj 2818]

2016-06-04 16:35 211 查看
题目地址——

Gcd

【题目描述】

给定整数 N,求 1<=x,y<=N 且 Gcd(x,y) 为素数的数对 (x,y) 有多少对.

【输入描述】

一个整数 N

【输出描述】

如题。

【样例输入】

4

【样例输出】

4

【Solution】

ans=∑j=1the number of prime{∑i=1⌊nprimej⌋φ(i)}⋅2−1

【Code】

#include <iostream>
#include <cstdio>
#include <cmath>

#define LL long long

using namespace std;

LL n,ans;
bool no_prime[10000010];
int prime[10000010];
int phi[10000010];
LL sum[10000010];

int main(){

scanf("%lld",&n);

phi[1]=1;
no_prime[1]=true;
phi[0]=0;

for(LL i=2;i<=n;i++){
if(!no_prime[i]){
prime[++prime[0]]=i;
phi[i]=i-1;
}
for(LL j=1;prime[j]*i<=n;j++){
no_prime[i*prime[j]]=true;
if(i%prime[j]==0){
phi[i*prime[j]]=phi[i]*prime[j];
break;
}
else phi[i*prime[j]]=phi[i]*(prime[j]-1);
}
}

for(LL i=1;i<=n;i++)sum[i]=sum[i-1]+phi[i];
for(LL i=1;i<=prime[0];i++)ans+=sum[n/prime[i]]*2-1;

printf("%lld\n",ans);

return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: