Mobius函数计算 定义+代码模板

Mobius函数定义为,输入一个正整数N,当N=1时,函数值为1,当N不为1时,首先在稿纸上将它分解质因数,若某质因数的个数大于1,则函数值为0,如N=45,45=3*3*5,3出现了两次,故函数值为0。若质因数全都不相同,设有p个,则函数值为(-1)的p次方,如78,78=2*3*13,质因数全都不相同,有3个,所以函数值为(-1)的3次方,为-1。

f(n)和g(n)是定义在正整数集合上的两个函数,若
  

  
反之亦然。
  其中
  μ(d)=1, 若d=偶数个不同素数之积
  μ(d)=(-1)r, 若d=奇数个不同素数之积
  μ(d)=0, 其他
例如:
μ( 30) = μ( 2·3·5 ) = (-1)3
μ(12) = μ( 3·22) = 0
对任何素数p,μ(p)=-1

辅助定理

编辑
对于任意正整数n,恒有
  
代码模板:

#include <stdio.h>
// 一个数字可以有的最多不同质因数个数 
#define MAX_PRIM_FACTOR_AMOUNT 1000 /*
Mobius 函数定义为:输入一个正整数N,当N=1时,函数值为1,当N不为1时,首先在稿纸上将它分解质因数。若某质因数的个数大于1,则函数值为0,如N=45,45=3*3*5,3出现了两次,故函数值为0。若质因数全都不相同,设有p个,则函数值为(-1)的p次方,如78,78=2*3*13,质因数全都不相同,有3个,所以函数值为(-1)的3次方,为-1。
*/
/*功能:求  Mobius 函数的值参数:n        一个正整数  doPrint    是否输出正整数 n 的质因数分解形式。1:输出;0:不输出。 返回: Mobius 函数的值
*/
int Mobius(unsigned int n, unsigned int doPrint)
{// 用 m 来临时保存 m 的值。因此 n 的值在运算过程中会被改变。 int m = n; // 用 i 来枚举 n 的质因数int i;// 数字 n 的不同质因数个数 int primeFactorAmount = 0;// n 的某个质因数 i,出现在 n 中的次数 int countCurrentPrimeFactor = 0;// Mobius 函数的值。初始值为 -3,表示还没有计算出函数值。 int result = -3;// 记录所有质因数出现的次数。用于输出质因数分解形式。 int primFactors[MAX_PRIM_FACTOR_AMOUNT][2]; if(n == 0){// 【1】n==0 的情况,实际是非法的输入。这里返回 -2。 result = -2;}else if(n == 1){// 【2】n==1 的情况result = 1;}else{for(i=2; i<=n ; i++){countCurrentPrimeFactor = 0;while(n % i == 0){// 从数字 n 中除去质因数 i n /= i;// 统计质因数 i 出现的次数 countCurrentPrimeFactor ++;}if(countCurrentPrimeFactor >= 1){// 数字 i 是数字 n 的质因数 primFactors[primeFactorAmount][0] = i;primFactors[primeFactorAmount][1] = countCurrentPrimeFactor;primeFactorAmount ++;if(countCurrentPrimeFactor > 1){// 【3】 n 的某质因数的个数大于 1 的情况 result = 0;}                }}if(result == -3){// 【4】 n 有 p 个不同的质因数,返回 (-1)^p result = (primeFactorAmount%2 ? -1 : 1);    }        }if(doPrint){// 需要输出 n 的质因数分解形式if(m <= 1)printf("%d = %d\n", m , m);else{printf("%d = ", m);for(i=0; i<primeFactorAmount; i++){printf("%d", primFactors[i][0]);if(primFactors[i][1] > 1)// 质因数出现多余一次,输出出现次数。 printf("^%d", primFactors[i][1]);if(i < (primeFactorAmount-1))printf(" * ");}printf("\n");}      } return result;}
int main(int argc, char *argv[])
{int n;// 输入 n ,按 ctrl + z 停止输入 while(scanf("%d",&n) !=EOF){printf("Mobius(%d) = %d\n", n, Mobius(n, 1));} return 0;
}

/*
测试数据:
0
1
45
78 
12345678测试结果:
0
0 = 0
Mobius(0) = -2
1
1 = 1
Mobius(1) = 1
45
45 = 3^2 * 5
Mobius(45) = 0
78
78 = 2 * 3 * 13
Mobius(78) = -1
12345678
12345678 = 2 * 3^2 * 47 * 14593
Mobius(12345678) = 0
^Z 
*/


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/510391.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

不仅有0.0075元的深度冷归档,更有对下一代云存储的重新定义

前言&#xff1a;重新定义下一代云存储&#xff0c;需要继续保障稳定、安全、可靠和低成本&#xff0c;进一步演进 Serverless 能力&#xff0c;智能适配负载变化&#xff0c;提供智能数据管理能力以及全场景覆盖不断发展的新负载。 阿里云存储的创新活力&#xff0c;不仅拓展了…

一图看懂镜像

原文链接 本文为阿里云原创内容&#xff0c;未经允许不得转载。

数值方法求积分 详解+模板代码

什么是数值积分 数值积分可以用来求定积分的近似值。对于很多函数来说&#xff0c;我们是可以使用初等函数来表示出其积分的&#xff0c;对于这种函数&#xff0c;只需要求出不定积分然后代入值就能得到定积分了。 可是除此之外还有许多难求的函数和没法使用初等函数表示的函数…

用积木讲运维,这样的IT人太会了

积木的拼搭&#xff0c;是件细致工作。用不同的积木&#xff0c;进行组合变换&#xff0c;小孩子可能会用积木搭高楼、搭汽车、搭公路&#xff0c;而IT人则选择通过搭建小积木&#xff0c;讲解可观测的大乾坤。 大家所熟知的日志服务SLS不只是“日志存储”&#xff0c;更是一个…

再谈数据湖3.0:降本增效背后的创新原动力

前言&#xff1a;2022年3月 31 日&#xff0c;阿里云全球数据湖峰会上&#xff0c;阿里云从“湖管理、湖存储和湖计算“这三个方面&#xff0c;为观众带来了“数据湖 3.0” 的重磅升级方案。在时隔两百多天的云栖大会上&#xff0c;阿里云存储对数据湖的能力&#xff0c;进行了…

原码 反码 补码 详解

一. 机器数和真值 在学习原码, 反码和补码之前, 需要先了解机器数和真值的概念. 1、机器数 一个数在计算机中的二进制表示形式, 叫做这个数的机器数。机器数是带符号的&#xff0c;在计算机用一个数的最高位存放符号, 正数为0, 负数为1. 比如&#xff0c;十进制中的数 3 &…

谈谈 PolarDB-X 在读写分离场景的实践

在数据库使用过程中经常会遇到一些场景&#xff1a; 业务写流量一直相对比较稳定&#xff0c;但随着时间&#xff0c;数据不断增加&#xff0c;数据库的压力也会越来越大&#xff0c;写操作会影响到读请求的性能&#xff0c;做任何优化可能都达不到最终的效果&#xff1b;在应…

开源数据库 PolarDB 为什么能捕获娃哈哈的心?

一、娃哈哈的需求 娃哈哈已经使用PostgreSQL多年&#xff0c;使用了大量逻辑复制&#xff0c;且备库仅提供一些业务的只读服务。同时&#xff0c;其重要业务的数据库运行在共享SAN存储上。因此&#xff0c;它存在主备库延迟较大、逻辑复制不稳定且延迟大的痛点。 二、使用Pola…

数据库 PolarDB 开源之路该如何走?听听他们怎么说

阿里巴巴集团副总裁、阿里云数据库事业部负责人李飞飞出席了沙龙并致开场辞&#xff1a;PolarDB 是阿里云的明星产品&#xff0c;做出将PolarDB 开源的决策需要非常大的勇气。将最核心的数据库产品对外开源&#xff0c;且使用了最友好的协议&#xff0c;阿里云是全球头部云厂商…

通过定时 SQL 提取阿里云API 网关访问日志指标

背景 阿里云API网关服务提供API托管服务&#xff0c;提供了强大的适配和集成能力&#xff0c;可以将各种不同的业务系统API实现统一管理。API网关同时支持将API访问日志一键存储到日志服务&#xff0c;通过日志服务强大的查询分析能力&#xff0c;用户可以针对访问日志自定义计…

2022云栖现场|体验阿里巴巴工作数字化实践

越来越多的企业主动拥抱数字化转型&#xff0c;借助数字化工具提高企业运营效率&#xff0c;实现企业目标落地、帮助员工成长。 2022云栖大会&#xff0c;阿里巴巴企业智能带来阿里数字化工作方法与企业IT解决方案&#xff0c;展示着阿里内部在办公协同与IT管理上的实际应用场…

K8s 场景下 Logtail 组件可观测方案升级-Logtail 事件监控发布

背景 随着K8s和云的普及&#xff0c;越来越多的公司将业务系统部署到云上&#xff0c;并且使用K8s来部署应用。Logtail是SLS提供的日志采集Agent&#xff0c;能够非常好的适应K8s下各种场景的日志采集&#xff0c;支持通过DaemonSet方式和Sidecar方式采集Kubernetes集群的容器…

一图看懂,阿里云飞天企业版如何支持政企数智创新

杭州&#xff0c;2022年11月5日 – 今日&#xff0c;在云栖大会专有云技术和应用实践论坛&#xff0c;阿里云重磅发布飞天企业版在建云、管云、用云方面的全面升级&#xff0c;并邀请行业专家、政企客户代表和合作伙伴面向未来十年共话新一代政企IT发展趋势&#xff0c;分享阿里…

关于HTTPDNS,你知道多少?

什么是HTTPDNS&#xff1f; HTTPDNS是面向多端应用&#xff08;移动端APP&#xff0c;PC客户端应用&#xff09;的域名解析服务&#xff0c;具有域名防劫持、精准调度、实时解析生效的特性。 HTTPDNS工作流程 客户端直接访问HTTPDNS接口&#xff0c;获取业务在域名配置管理系…

当大火的文图生成模型遇见知识图谱,AI画像趋近于真实世界

导读 用户生成内容&#xff08;User Generated Content&#xff0c;UGC&#xff09;是互联网上多模态内容的重要组成部分&#xff0c;UGC数据级的不断增长促进了各大多模态内容平台的繁荣。在海量多模态数据和深度学习大模型的加持下&#xff0c;AI生成内容&#xff08;AI Gen…

使用 EasyCV Mask2Former 轻松实现图像分割

导言 图像分割(Image Segmentation)是指对图片进行像素级的分类&#xff0c;根据分类粒度的不同可以分为语义分割(Semantic Segmentation)、实例分割(Instance Segmentation)、全景分割(Panoptic Segmentation)三类。图像分割是计算机视觉中的主要研究方向之一&#xff0c;在医…

八皇后问题详解(最短代码)

八皇后问题算法分析&#xff1a; 分析1&#xff1a;八皇后由一个64格的方块组成&#xff0c;那么把八个皇后放入不考虑其他情况利用穷举法&#xff0c;有8^64种 可能。 分析2&#xff1a;显然任意一行有且仅有1个皇后&#xff0c;使用数组queen[0->7]表示第i行的皇后位于哪一…

5个编写技巧,有效提高单元测试实践

1. 什么是单元测试 “在计算机编程中&#xff0c;单元测试又称为模块测试&#xff0c;是针对程序模块来进行正确性检验的测试工作。程序单元是应用的最小可测试部件。在过程化编程中&#xff0c;一个单元就是单个程序、函数、过程等&#xff1b;对于面向对象编程&#xff0c;最…

谈谈我工作中的23个设计模式

序 从基础的角度看&#xff0c;设计模式是研究类本身或者类与类之间的协作模式&#xff0c;是进行抽象归纳的一个很好的速成思路。后面阅读设计模式后&#xff0c;为了加深理解&#xff0c;对相关图片进行了描绘和微调。 从技术的角度已经有很多好的总结&#xff0c;本文会换…

OpenSergo 流量路由:从场景到标准化的探索

流量路由&#xff0c;顾名思义就是将具有某些属性特征的流量&#xff0c;路由到指定的目标。流量路由是流量治理中重要的一环&#xff0c;多个路由如同流水线一样&#xff0c;形成一条路由链&#xff0c;从所有的地址表中筛选出最终目的地址集合&#xff0c;再通过负载均衡策略…