莫比乌斯反演简单题

莫比乌斯反演简单题莫比乌斯函数这里简述一下莫比乌斯函数 若 d 1 那么 d 1 若 d p1p2 pr r 个不同质数 且次数都为一 d 1 r 其余 d 0 莫比乌斯反演的性质性质一 莫比乌斯反演公式 f n d n d F n d f n sum d n mu d F n d 性质二 n 是积性函数性质三 设 f 是算术函数 它的和函数 F n

莫比乌斯函数

这里简述一下莫比乌斯函数:

即μ[i]=1表示i是偶数个不同素因子的乘积,μ[i]=-1表示i是奇数个不同素因子的乘积,μ[i]=0表示其他(即如果有相同素因子就是0)

而i==1时,规定μ[1] = 1。


莫比乌斯反演的性质

性质一:(莫比乌斯反演公式)

f(n)=(d|n)μ(d)F(n/d)

莫比乌斯反演简单题

性质二:μ(n)是积性函数

性质三:设f是算术函数,它的和函数F(n)=∑(d|n)f(d)是积性函数,那么f也是积性函数。


HDU – 1695 – GCD

题目传送:GCD

题意:求[1,n],[1,m]中gcd为k的两个数的对数

思路:这里可以转化一下,也就是[1,n/k],[1,m/k]之间互质的数的个数,模板题

F(n)=(n|d)f(d)

所以有:

f(n)=(n|d)μ(d/n)F(d)

不过这里需要注意去重,即去掉重复的那一部分的一半即可

AC 代码:

#include  #include 
      #include 
      #include 
      #include 
      #include 
      #include 
      #include 
      #include 
      #include 
      #include 
      #include 
      #include 
      #include 
      #include 
      #include 
      #include 
      #include 
      #include 
      #include 
      #include 
      #define LL long long #define INF 0x7fffffff using namespace std; const int maxn = ; bool vis[maxn]; int prime[maxn]; int mu[maxn]; int tot; void init() { memset(vis, 0, sizeof(vis)); mu[1] = 1; tot = 0; for(int i = 2; i < maxn; i ++) { if(!vis[i]) { prime[tot ++] = i; mu[i] = -1; } for(int j = 0; j < tot; j ++) { if(i * prime[j] >= maxn) break; vis[i * prime[j]] = true; if(i % prime[j] == 0) { mu[i * prime[j]] = 0; break; } else { mu[i * prime[j]] = -mu[i]; } } } } int main() { init(); int T; int a, b, c, d, k; scanf("%d", &T); for(int cas = 1; cas <= T; cas ++) { scanf("%d %d %d %d %d", &a, &b, &c, &d, &k); if(k == 0) { printf("Case %d: 0\n", cas); continue; } b /= k; d /= k; if(b > d) swap(b, d); LL ans = 0; for(int i = 1; i <= b; i ++) { ans += (LL)mu[i] * (b / i) * (d / i); } LL t = 0; for(int i = 1; i <= b; i ++) { t += (LL)mu[i] * (b / i) * (b / i); } ans -= t / 2; printf("Case %d: %I64d\n", cas, ans); } return 0; } 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/215331.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月18日 下午2:09
下一篇 2026年3月18日 下午2:10


相关推荐

  • java数据库调用「建议收藏」

    1.概念:JavaDatabaseConnectivity java数据库连接​ 本质:其实是官方(SUN公司)提供的一套操作所有关系型数据库的规则(接口),各个数据库厂商会去实现这套接口,产生数据库驱动(Jar包),我们可以使用这套接口(JDBC)编程,真正执行的代码驱动包里的实现类。2.快速入门​ 1.导入jar包 mysql-connector-java-5.1.37-bin….

    2022年4月12日
    67
  • Smail语法「建议收藏」

    Smail语法「建议收藏」Smail语言首先了解什么是smail?apk文件通过apktool反编译出来的都有一个smali文件夹,里面都是以.smali结尾的文件。smali语言是Davlik的寄存器语言,语法上和汇编语言相似,DalvikVM[1]与JVM的最大的区别之一就是DalvikVM是基于寄存器的。基于寄存器的意思是,在smali里的所有操作都必须经过寄存器来进行。S…

    2025年8月19日
    6
  • 列选主元的高斯消去法——MATLAB实现

    列选主元的高斯消去法——MATLAB实现以列最大为最大的策略实行高斯消去

    2026年3月18日
    2
  • python求和函数sum()详解

    python求和函数sum()详解python 求和函数 sum 详解今天在学习的过程中 误用 sum 函数 我又去查了查 pythonsum 函数才恍然大悟 我本来想算几个 Int 值相加的和 本以为很简单的事情 结果却很悲伤 例 gt gt gt sum sum 1 2 3 结果很明显出现问题报错 TypeError sumexpecteda got

    2026年3月20日
    2
  • 查询数据库隔离级别「建议收藏」

    查询数据库隔离级别「建议收藏」查询数据库当前隔离级别select@@tx_isolation;修改隔离级别settx_isolation=‘READ-UNCOMMITTED’;隔离级别有READ-UNCOMMITTED(读取未提交内容),READ-COMMITTED(读取提交内容),REPEATABLE-READ(可重读),SERIALIZABLE(可串行化)…

    2022年5月26日
    63
  • 【JAVA定时器】四种常见定时器的原理和简单实现

    【JAVA定时器】四种常见定时器的原理和简单实现个人学习笔记分享,当前能力有限,请勿贬低,菜鸟互学,大佬绕道如有勘误,欢迎指出和讨论,本文后期也会进行修正和补充前言定时器顾名思义,即定时触发某个事件,分离开来,即包含三个因素:定时,触发,某个事件,本文也将以此为基础介绍五种常见的定时器本文只做基于SpringBoot的示例,其余版本的请自行查阅资料,大同小异1.介绍1.1.目的定时器的目的即为了在某个时间点,程序自身主动触发某个事件,而不需要外力去开启或者启动,以节省人力并统一管理1.2.示例场景管理系统,需要每日12点.

    2022年7月8日
    18

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号