最大公约数问题

利用欧拉函数解决最大公约数相关问题 一、欧拉函数与最大公约数 欧拉函数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

fMRI脑影像特征提取——Pearson相关与低阶功能连接LOFC(dpabi+nilearn)

一个连接由节点和连接强度(边)组成。功能连接中的节点可以是单个体素,也可以是由脑图谱定义的脑区ROI。通常的做法是将脑图谱中多个或者全部ROI作为节点,或者是将脑图谱中单个ROI与全脑体素作为节点。定义连接强度(边),最常用的方式是Pearson相关,两个节点之间可能没有物理连接,但如果他们的BOLD信号同步性很强,则它们之间可能存在很强的功能上的协作,即很强的功能连接,这是一个很好的表征两个节点间关系的特征。

意疏的学习笔记 2万+

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

FakeNewsGPT4:通过知识增强的大规模视觉语言模型推进多模态假新闻检测

当前,多模态假新闻的大量涌现导致了显著的分布差异,这一现状亟需我们开发具备广泛适用性的检测器。然而,现有假新闻检测器因特定领域内的训练方式,难以有效获取开放世界中的事实信息。这种训练的封闭性限制了传统检测器的能力,特别是在面对跨域假新闻时,其表现往往不尽如人意。具体而言,开放世界中的假新闻在两个方面具有显著的分布差异:一方面,其操纵内容多种多样,新闻的任一部分都可能受到创意策略的操控;另一方面,真实背景复杂多变,不同地区的新闻背景和主题焦点存在显著差异。

qq_52053775的博客 822

PCL 八叉树的使用

八叉树(Octree)是一种空间划分的数据结构,广泛应用于三维点云的处理和分析。八叉树通过将空间递归地划分为八个子区域,可以有效地组织和索引三维点数据,提升点云的查询、降采样和配准等操作的效率。

纵马踏花向自由 1658

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

VxWorks系列 快速导航

Vxworks系列快速阅览导航

Mr.Sugarcane 1308

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

微信小程序码 createWxaCodeUnlimit 生成总是报错 41030 的解决方案

41030错误本质上就是路径不合法。路径多写了一个斜杠路径带了参数小程序版本未发布或 app.json 配置不一致。如果确认页面存在,可以通过来跳过检查。微信小程序 getUnlimitedQRCode 官方文档路径前不能加 /,参数放 scene,发布版本要有这个页面,不行就关掉 check_path。

代码简单说 Vue、JAVA、PHP、Node.js 熟练运用,接口、架构、性能全搞定。 474

国科大作业考试资料-人工智能原理与算法-2024新编-第十一次作业整理

1、有一位教授想知道学生是否睡眠充足。每天,教授观察学生在课堂 上是否睡觉,并观察他们是否有红眼。教授获得如下的领域知识: (1)没有观察数据时,学生睡眠充足的先验概率为0.7。 (2)给定学生前一天睡眠充足为条件,学生在晚上睡眠充足的概率是0.8;如果前一天睡眠不充足,则是0.3。 (3)如果学生睡眠充足,则红眼的概率是0.2,否则是0.7。 (4)如果学生睡眠充足,则在课堂上睡觉的概率是0.1,否则是0.3。 将这些信息形式化为一个动态贝叶斯网络,使教授可以使用这个网络从观察序列中进行滤波和预

MatsumotoChrikk 1055

求最大公约数问题

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

Cynric 的博客 1455

RFC 字符码转换深度解析:Unicode、非 Unicode 与 MDMP 系统的协奏

老版本 MDMP 系统不上传自定义映射时,Unicode 端会落回“预配置列表”。列表里可见西欧 1100、日文 8000、中文 8400 等经典编号。若需强制覆写映射,可在 SM59 ➡Unicode页签启用,或直接勾选作为兜底。字符编码问题常“潜伏”多年,一旦旧系统升级或新增语种便集中爆发。掌握 RFC code page 转换机理、灵活运用 SM59 选项、在早期对 LANG 字段和字段长度进行治理,是根治乱码与 short dump 的关键。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 222

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

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

Michael是个半路程序员 1603

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

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

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

1207:求最大公约数问题

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

ice___snow的博客 3842

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

关于最大公约数与最大公倍数的相关问题(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

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

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

最大公约数 求两个数的最大公约数用辗转相除法。代码如下: 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、付费专栏及课程。

余额充值