前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >花式求GCD - plus studio

花式求GCD - plus studio

作者头像
plus sign
发布2024-02-29 08:12:54
770
发布2024-02-29 08:12:54
举报
文章被收录于专栏:个人博客

花式求GCD

今天学校实验室纳新群有同学提到了a^=b^=a^=b​ 交换两个数的操作,我突然想到之前在知乎看到通过异或实现gcd的方法,一番翻找后没啥结果,便去问了下认识的oi大佬有没有一行求gcd的算法。

大佬很快给出了一个函数int gcd(int a,int b){return y?gcd(y,x%y):x;} 真的就是一行,完整的代码就是下面这个

代码语言:text
复制
#include <bits/stdc++.h>
using namespace std;
int gcd(int x, int y) { return y ? gcd(y, x % y) : x; }
int main(){
	int a,b;
	a=10;
	b=20;
	a = gcd(a,b);
	cout<<a<<endl;
	return 0;
}

但是我一像不对啊,我的异或呢?我又问了一下,大佬给了我一个截图

就是这个神奇的写法

这段代码的实现方式是,使用异或运算符(^)和取模运算符(%)来交换变量a和b的值。具体来说,代码中的while循环会一直执行,直到b的值为0为止。在每次循环中,代码会先将a对b取模,然后将结果赋值给a,接着将b对a取模,然后将结果赋值给b,最后使用异或运算符交换a和b的值。这样,当循环结束时,a和b的值就被成功地交换了。(来自copilot chat)

代码语言:text
复制
#include <bits/stdc++.h>
using namespace std;
int main(){
	int a,b;
	a=10;
	b=20;
	while(b^=a^=b^=a%=b);
	cout<<a<<endl;
	return 0;
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2023-8-2,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 花式求GCD
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档