莫比乌斯反演例题解析

标签: 莫比乌斯反演
1294人阅读 评论(0) 收藏 举报
分类:

传送门
题目描述

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

输入

一个整数N

输出

如题

样例输入

4

样例输出

4
解题思路:
这个题目出来可以用欧拉函数来解答之外,点击此处 这是欧拉函数解这道题的思路
那么我们还可以用莫比乌斯反演来做,首先介绍一下莫比乌斯反演的公式:

F(n)=d|nf(d) f(n)=d|nF(nd)miu(d)(1)

其实还可以这么写:
F(n)=n|df(d) f(n)=n|dmiu(dn)F(d)(2)

在这道题里面就可以这么设了,那么我们现在可以给两个f函数赋值了:
f(d)GCD(x,y)==d(1<=x,y<=n)

F(d)d|GCD(x,y)(1<=x,y<=n)

那么我们可以写出
F(d)=ndnd(3)

所以根据式子(2)和(3)可以知道
f(n)=n|dmiu(dn)ndnd

又因为 GCD(x,y) 是素数,那么我们可以枚举区间[1,n]的每个素数(素因子分解可以实现)

ans=pn(dnmiu(d)npdnpd)p

然后再YY一下就可以搞定了。。。
上代码:

#include <iostream>
#include <cstdio>
#include <cstring>
#include <cstdlib>

using namespace std;
typedef long long LL;
const int MAXN = 1e7+5;
bool prime[MAXN];
int p[MAXN];
int mu[MAXN];
int phi[MAXN];
int k;
///mu函数
void Init()
{
    k = 0;
    memset(prime, 0, sizeof(prime));
    mu[1] = 1;
    for(int i=2; i<MAXN; i++)
    {
        if(!prime[i])
        {
            p[k++] = i;
            mu[i] = -1;
            phi[i] = 1;
        }
        for(int j=0; j<k&&i*p[j]<MAXN; j++)
        {
            prime[i*p[j]] = 1;
            if(i%p[j] == 0)
            {
                mu[i*p[j]] = 0;
                phi[i*p[j]] = mu[i];//p[j] * phi[i];
                break;
            }
            else
            {
                mu[i*p[j]] = -mu[i];
                //phi[i*p[j]] = (p[j]-1) * phi[i];
                phi[i*p[j]] = mu[i] - phi[i];
            }
        }
    }
}
int sum[MAXN];
void get_sum()
{
    sum[0] = 0;
    for(int i=1; i<MAXN; i++)
        sum[i] = sum[i-1]+phi[i];
}
int main()
{
    Init();
    get_sum();
    LL n;
    scanf("%lld",&n);
    LL ans = 0;
    for(int i=1,last; i<=n; i=last+1)
    {
        last = n/(n/i);
        ans += (n/i)*(n/i)*(sum[last]-sum[i-1]);
    }
    printf("%lld\n",ans);
    return 0;
}
查看评论

2018软考系统集成项目管理工程师视频教程 案例分析精讲

参加工作后,我们没有太多的时间投入到系统集成项目管理工程师的备考中,教程太厚、真题太难,怎么花最少的时间顺利通过考试是每个人都在探索的问题。看视频,小任老师帮你把握考试重点,用最短的时间,让你学到最应该掌握的内容。视频内容包括:09-14年历年案例分析真题详细解析。(一次付费学习课程,直到通过考试,并且每年真题解析免费更新 )
  • 2015年04月08日 14:57

初涉莫比乌斯反演(附带例题)

什么是莫比乌斯反演 关于莫比乌斯反演 莫比乌斯反演,又称懵逼钨丝繁衍,是一种看了就一脸懵逼的东西。 好吧好吧,严肃点。(不过因为本蒟蒻真的很懵逼,所以错误之处请大神指出) 莫比乌斯反演就是...
  • litble
  • litble
  • 2017-05-29 21:28:34
  • 3712

莫比乌斯反演简单题

莫比乌斯函数这里简述一下莫比乌斯函数: 若d=1 那么μ(d)=1 若d=p1p2…pr (r个不同质数,且次数都为一)μ(d)=(-1)^r 其余 μ(d)=0 莫比乌斯反演的性质性...
  • u014355480
  • u014355480
  • 2015-08-10 21:11:24
  • 2191

莫比乌斯反演1001 BZOJ 2818 莫比乌斯反演例题

题意: 给定整数N,求1
  • qq_27925701
  • qq_27925701
  • 2016-08-01 19:56:21
  • 465

莫比乌斯函数和反演定理的理解

这几天复习了莫比乌斯函数的运用,主要是用来解决倍数的问题的。现在就谈谈莫比乌斯函数的性质和反演定理的理解。 首先定义 u(x)u(x) 为莫比乌斯函数。他有以下性质: 1.∑d|mu(x)=[m=...
  • lovewangtaotao
  • lovewangtaotao
  • 2016-08-30 09:34:41
  • 1078

莫比乌斯反演及其应用-小结

莫比乌斯反演的形式: 另一种描述是: 一种是和所有的约数有关一种是和所有的倍数有关 关于莫比乌斯函数mu,他的定义如下: 这个莫比乌斯函数有一些性质: (1) ...
  • viphong
  • viphong
  • 2016-09-06 20:59:02
  • 976

又见莫比乌斯反演

题目:http://acm.uestc.edu.cn/#/contest/show/9   题意:给定两个正整数和,其中,,求的值,其中。   分析:本题是典型的莫比乌斯反演问题。那么,怎么反演呢? ...
  • ACdreamers
  • ACdreamers
  • 2014-04-18 21:33:29
  • 6245

莫比乌斯反演(入门)

细细算来,看反演已经有一两个星期了 刚开始的时候也是走了不少的弯路 和其他的算法一样,只要你懂了,就会有一种不过如此的感觉(误 感觉反演还是刚入门,不过还是先写一篇不完全的总结吧,不然过段时间就...
  • a1s4z5
  • a1s4z5
  • 2016-05-06 18:44:44
  • 1982

莫比乌斯反演

莫比乌斯函数值: int mobi(int n) { int m=1; for(int i=2;i*i
  • ACdreamers
  • ACdreamers
  • 2013-01-25 15:26:18
  • 43939

莫比乌斯反演初步

莫比乌斯反演是数论中很重要的内容,可以优雅解决很多数论的问题。之前浅学了一下,这两天寒假专题训练又拾起来刷了些题,想总结一下。由于内容较多本文证明部分会跳过一些,更着重于莫比乌斯反演在解题中的实际应用...
  • NExPlain
  • NExPlain
  • 2014-02-06 23:47:28
  • 1671
    个人资料
    专栏达人 持之以恒
    等级:
    访问量: 54万+
    积分: 1万+
    排名: 1632
    博客专栏