码迷,mamicode.com
首页 > 其他好文 > 详细

BZOJ 2818 gcd(莫比乌斯反演)

时间:2015-04-29 17:18:46      阅读:101      评论:0      收藏:0      [点我收藏+]

标签:bzoj 2818 gcd   莫比乌斯反演   

Gcd
Time Limit:10000MS     Memory Limit:262144KB     64bit IO Format:%lld & %llu

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;
}


BZOJ 2818 gcd(莫比乌斯反演)

标签:bzoj 2818 gcd   莫比乌斯反演   

原文地址:http://blog.csdn.net/acm_baihuzi/article/details/45367285

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!