最大公约数问题

利用欧拉函数解决最大公约数相关问题 一、欧拉函数与最大公约数 欧拉函数phi(i)表示在[1~i)中,与i互质的数的个数。 如要求1-n中所有数与n的最大公约数的和。 设count(x)为1-n中,与n的最大公约数为x的个数,即gcb(i,n)=x,i的个数。(gcb(x,y)为x和y的最大公约数) 这个count(x)怎么求呢? 有gcb(i,n)=x,则gcb(i/x,n/x)=1,(如果为k,k!=1,则gcb(i, 阅读详情

解法1:辗转相除法。

代码1:

int gcd(int a,int b)
{
	return (!b) ? a : gcd(b,a%b);
}

解法2:用减法替换除法。

代码2:

int gcdi(int a,int b)
{
	/*guarantee that a >= b*/
	if (a < b)
		return gcdi(b,a);
	if (b == 0)
		return a;
	else
		return gcdi(a - b, b);
}

解法3:利用奇偶性降低复杂度。

代码3:

int gcdii(int a,int b)
{
	/*guarantee that a >= b*/
	if (a < b)
		return gcdii(b,a);
	if (b == 0)
		return a;
	else {
		if (!(a & 0x1)){/* a is even */
			if (!(b & 0x1)) /* b is even*/
				return (gcdii(a >> 1,b >> 1) << 1);
			else /* b is odd */
				return (gcdii(a >> 1,b));
		}
		else { /* a is odd*/
			if (!(b & 0x1)) /* b is even */
				return gcdii(a,b >> 1);
			else /* b is odd */
				return gcdii(b,a - b);
		}
	}	
}

测试程序:

#include <stdio.h>
#include <assert.h>
#include <time.h>
#include <unistd.h>
#include <windows.h>
#include <stdlib.h>
#include <dos.h>

int gcd(int a,int b)
{
	return (!b) ? a : gcd(b,a%b);
}

int gcdi(int a,int b)
{
	/*guarantee that a >= b*/
	if (a < b)
		return gcdi(b,a);
	if (b == 0)
		return a;
	else
		return gcdi(a - b, b);
}

int gcdii(int a,int b)
{
	/*guarantee that a >= b*/
	if (a < b)
		return gcdii(b,a);
	if (b == 0)
		return a;
	else {
		if (!(a & 0x1)){/* a is even */
			if (!(b & 0x1)) /* b is even*/
				return (gcdii(a >> 1,b >> 1) << 1);
			else /* b is odd */
				return (gcdii(a >> 1,b));
		}
		else { /* a is odd*/
			if (!(b & 0x1)) /* b is even */
				return gcd(a,b >> 1);
			else /* b is odd */
				return gcd(b,a - b);
		}
	}	
}

int main()
{
	int a = 321232;
	int b = 329800;
	int r;
	
	clock_t s,t;
	s = clock();
	r = gcd(a,b);
	//Sleep(1000);
	t = clock();
	printf("%d\n",CLOCKS_PER_SEC);
	
	printf("Gcd(%d,%d) = %d . Time consumed %dms . \n",a,b,gcd(a,b),t-s);
	printf("Gcdi(%d,%d) = %d .\n",a,b,gcdi(a,b));
	printf("Gcdii(%d,%d) = %d .\n",a,b,gcdii(a,b));
}


REF:

1,编程之美 2.7



求最大公约数问题(C++) 【题目描述】 给定两个正整数,求它们的最大公约数。 【输入】 输入一行,包含两个正整数(<1,000,000,000)。 【输出】 输出一个正整数,即这两个正整数的最大公约数。 【输入样例】 6 9 【输出样例】 3 这道题方法多,我就列举3个 No.1: 暴力枚举代码: #include<bits/stdc++.h> using namespace std; in... 阅读详情

相关推荐

三齿轮问题(最大公约数)

在齿轮箱里三个齿轮互相衔接,某瞬间两对齿相遇,问各转多少圈后,这两对齿同时重逢。 输入 输入数据有多组,每组数据一行,每行为3个数a,b,c,分别代表三个齿轮的齿数(均为正整数)。数与数之间用空格隔开。当a,b,c中有一个为0时,输入结束。 输出 输出每组数据中,每个齿轮所转的圈数,用空格隔开。 样例输入 1 1 1 2 2 2 0

本博停更 新博客:bugnull.com 2692

最大公约数和最小公倍数问题

最大公约数和最小公倍数问题 Time Limit:1000MS Memory Limit:65536K Description 输入二个正整数x0,y0(2 <= x0 <100000,2 <= y0 <= 1000000),求出满足下列条件的P,Q的个数 条件: 1、P,Q是正整数 2、要求P,Q以x0为最大公约数,以y0为最小公倍数. 试求:满足条...

weixin_30756499的博客 146

CTR模型:Deep&Cross Network

1. 简介 DCN模型(Deep & Cross Network for Ad Click Predictions)是2017年提出的。 出发点: (1)人工探索所有的交叉特征是不现实的; (2)难于推广未曾出现过的交叉特征。 DNN能够自动探索交叉特征并推广到未出现过的交叉特征,但是DNN的学习效率不高,且无法显式的学习特征交叉。 Deep&Cross Network, DCN 模型保留了DNN的优点,并提出了新的cross network,高效学习高阶特征交互。 优点: (1)cross

rosefun96的博客 9357

FZU 1753-Another Easy Problem(求多个组合数的最大公约数)

Another Easy Problem Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Submit Status Practice FZU 1753 Appoint description:  xietutu  (2013-03-13)System Crawler 

Rocky0429 2507

Crush 终端 LLM 工具安装与使用指南:把 AI 编程助手装进你的命令行

喜欢命令行的开发者需要离线/轻量级 AI 助手的场景希望自定义模型与工具链的高级用户通过LSP + MCP + 多模型支持,Crush 不仅能写代码,还能理解项目、调用工具、连接服务,真正成为你的“终端编程搭档”。

weixin_44058951的博客 1616

用户存续期价值评估(CLV) 一

用户存续期价值评估(CLV) 1 一. 定义 ​     用户存续期价值(Customer Lifetime Value),也可称为CLTV、LCV或者LTV,是企业对未来一个客户与其的关系所带来的净收益的预测。这个预测模型可以有不同水平的复杂度和精确度,从一个直观感觉到使用复杂的预测技术。CLV可以被简单理解为客户关系的价值,也就是未来由于与客户的关系所带...

weixin_43171270的博客 8025

POJ 2480 求每一个数对于n的最大公约数的和

这里是枚举每一个最大公约数p,那么最后求的是f(n) = sigma(p*phi(n/p)) phi()为欧拉函数 这里可以试着算一下,然后会发现这个是积性函数的 那么只要考虑每一类质数分开算,最后乘在一起就行了 而对于f(p^k) p为素数的求解可以这样考虑 对于前一个f(p^(k-1)) , 那么f(p^k)相当于把f(p^(k-1)) 中的所有情况都乘上了p , 然...

weixin_30455365的博客 164

超详细版!Obsidian+Claude+Skills+云同步,打造智能 AI 知识库

本文介绍如何搭建高效的AI知识管理系统,将Obsidian笔记工具与ClaudeAI助手深度整合。通过ClaudeCode安装配置、ObsidianSkills插件添加和坚果云同步设置,实现本地存储安全性与云端便捷性的完美结合。该系统支持智能笔记整理、知识图谱可视化、智能搜索问答和内容创作辅助等功能,使静态笔记转变为能自动分析关联、处理复杂结构的"活"知识库。详细步骤包括工具准备、环境配置、插件安装和云同步设置

2301_79998006的博客 1078

hdu1222(最大公约数解决问题,水题)

题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=1222 题目描述: 给你两个数字一个m,一个n,然后要叫你判断按照每隔m个去遍历总个数为n的洞,看有没有没遍历到的洞。比如:m=1,n=3,那么你要去遍历就是0,1,2,没有空余的洞,即全部遍历到了,就输出"NO"。 再举个例子,如:m=4,n=8,要去找的话就是,0,4等等无限循环。所以遍历不到1,2...

zhoupingqi2017的博客 284

计算机网络实验(华为eNSP模拟器)——第十章 Eth-Trunk(链路聚合)

目录一、Eth-Trunk的定义二、Eth-Trunk的工作模式(一)LACP模式1、定义2、命令(二)手工负载分担模式1、定义2、命令三、结语 一、Eth-Trunk的定义 Eth-Trunk是指设备的链路聚合,即将该设备的多个接口捆绑成一个接口,从而达到了增加带宽和提高可靠性的目的。我们要注意它是将多条物理链路,在逻辑上合并成一条,而不是串在一起。例我们将LSW1交换机S5700的三个端口(即GE0/0/1 、GE0/0/2、GE0/0/3)定义为一个Eth-Trunk接口与LSW2交换机相连,如下:

小宇y的博客 8416

Linux LT8912b调试记录(MIPI转LVDS/HDMI)

本文记录了在RK3588平台上使用LT8912B芯片实现MIPI转LVDS/HDMI的调试过程。主要包含设备树配置、驱动代码实现及常见问题解决。调试重点包括:1)正确配置1280x800分辨率的LVDS屏幕参数;2)确保I2C总线正常通信;3)解决花屏、图像抖动、黑屏等问题,涉及lane-rate计算、同步信号极性调整及MIPI模式选择。文中提供了详细的寄存器配置代码和故障排查方法,特别强调了I2C通信验证和电压匹配的重要性。通过参数优化和多种模式测试,最终实现了稳定的视频输出转换。

qq_45147279的博客 1087

求最大公约数问题

最大公约数问题,也不是个很难的问题,如果知道思路就很容易了。对于最大公约数问题,最简单的思路应该算是直接循环从1开始用两个数对其做除法了,找出最大公约数。不过这思路太没技术含量了,效率也低,如果数字很大,还是很慢的。 一般解决最大公约数问题的方法是:辗转相除法(欧几里德算法)。

Cynric 的博客 1455

制作你自己的yolov5数据集并进行训练

项目地址:make-your-yolov5_dataset 一、数据集标注软件 labelImg labelMe 精灵标注助手 更多的标注工具你可以去看:深度学习图像标注工具汇总 、 十个最常用深度学习图像/视频数据标注工具 、 百度一下 在这里我选择使用labelImg 二、数据集标注 下载labelImg 解压,直接打开labelimg.exe labelImg标注数据 标注完成后即可获得VOC格式(生成.xml文件)的数据 目录结构: dataset │ ├─Annotations .

年少的勇气已经用完,剩下的就是三思而后行 1万+

LeetCode 365. 水壶问题(最大公约数)

文章目录1. 题目2. 最大公约数 1. 题目 有两个容量分别为 x升 和 y升 的水壶以及无限多的水。请判断能否通过使用这两个水壶,从而可以得到恰好 z升 的水? 如果可以,最后请用以上水壶中的一或两个来盛放取得的 z升 水。 你允许: 装满任意一个水壶 清空任意一个水壶 从一个水壶向另外一个水壶倒水,直到装满或者倒空 示例 1: (From the famous "Die Hard" exam...

Michael是个半路程序员 1603

innovus:如何在init design之后新增参考库(lib/lef)

如题,在PR过程中经常会遇到这种问题,时序无法收敛,需要新增一套lvt或者hpc的库,怎么办?

m0_61544122的博客 5007

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

1207:求最大公约数问题

时间限制: 1000 ms 内存限制: 65536 KB 提交数: 2410 通过数: 1531 【题目描述】 给定两个正整数,求它们的最大公约数。 【输入】 输入一行,包含两个正整数(&lt;1,000,000,000)。 【输出】 输出一个正整数,即这两个正整数的最大公约数。 【输入样例】 6 9 【输出样例】 3 【来...

ice___snow的博客 3842

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

关于最大公约数与最大公倍数的相关问题(zufeoj)

问题 B: [2001_p2]最大公约数和最小公倍数问题(ZUFEOJ) 时间限制: 1 Sec 内存限制: 125 MB 提交: 38 解决: 34 [提交][状态][讨论版][命题人:外部导入] 题目描述 输入二个正整数x0,y0(2<=x0<100000,2<=y0<=1000000),求出满足下列条件的P,Q的个数。 条件: P,A是正整数; 要求P,Q...

weixin_45803988的博客 403

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

蓝桥杯核桃问题:最小公倍数和最大公约数

最大公约数 求两个数的最大公约数用辗转相除法。代码如下: int GCD(int a, int b){ int gcd; while(b != 0){ gcd = a % b; a = b; b = gcd; } gcd = a; return gcd; } 最小公倍数 那么两个数的最小公倍数gcm ...

a429367172的博客 339

C语言 递归 汉诺塔问题 最大公约数问题

函数不能嵌套定义,但能嵌套调用(在调用一个函数的过程中再调用另一个函数) 函数间接或直接调用自己,称为递归调用 汉诺塔问题 思想:简化为较为简单的问题 n=2 较为复杂的问题,采用数学归纳方法分析 递归什么时候终止:只剩一个圆盘的情况 A--到--B 费波纳茨数列 根据最大公约数的如下3条性质,...

ahct58280的博客 322
上一篇: C语言中的Sleep函数
下一篇: 子数组的最大乘积
Scandinavians
博客等级 码龄19年 36粉丝 121原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值