欧几里得及拓展欧几里得

博主链接

欧几里得

int gcd(int a,int b){

    return (b==0)?a:gcd(b,a%b);    //一条语句搞定(三元运算符)装逼,跟上面略有不同,上面做到t=0,这里做到b=0

}

拓展欧几里得

int gcd(int a,int b){

    return (b==0)?a:gcd(b,a%b);    //一条语句搞定(三元运算符)装逼,跟上面略有不同,上面做到t=0,这里做到b=0

}

ll lcm(ll a, ll b) {
    return a / gcd(a,b) * b;
}
int exgcd(int a,int b,int &x,int &y)
{
    if(b==0)
    {
        x=1;
        y=0;
        return a;
    }
    int r=exgcd(b,a%b,x,y);
    int t=x;
    x=y;
    y=t-a/b*y;
    return r;
}

拓展欧几里得求整数解个数

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

ll lcm(ll a, ll b) {
	return a / gcd(a, b) * b;
}

ll extend_gcd(ll a, ll b, ll&x, ll&y) {
	if (!b) {
		x = 1;
		y = 0;
		return a;
	}
	ll xt = 0, yt = 0;
	ll d = extend_gcd(b, a % b, xt, yt);
	x = yt;
	y = xt - yt * (a / b);
	return d;
}

ll cal(ll a, ll b, ll n) {    //计算ax+by == n的非负整数解组数
	ll x = 0, y = 0, d;
	d = extend_gcd(a, b, x, y);
	if (n % d != 0) {
		return 0;
	}
	x *= n / d, y *= n / d;
	ll LCM = lcm(a, b);
	ll t1 = LCM / a, t2 = LCM / b;
	if (x < 1) {
		ll num = (1 - x) / t1;
		x += num * t1;
		y -= num * t2;
		if (x < 1) {
			y -= t2;
			x += t1;
		}
	}
	if (y < 1) {
		ll num = (1 - y) / t2;
		y += num * t2;
		x -= num * t1;
		if (y < 1) {
			y += t2;
			x -= t1;
		}
	}
	ll ans = x > 0 && y > 0;
	if (ans) {
		ans += min((x - 1) / t1, ((n - 1) / b - y) / t2);
		ans += min((y - 1) / t2, ((n - 1) / a - x) / t1);
	}
	return ans;
}

 

全部评论

相关推荐

序&nbsp;朋友们,好久不见。&nbsp;笔者在过去消失的五个月里被困在情绪牢笼中过的相当煎熬,一度丢失自己,觉得整个世界都是昏暗的。&nbsp;庆幸的是靠着自己纯硬扛也是走出来了。表达欲再度回归,所以真的很开心还有机会能在再和大家见面。&nbsp;破碎秋招&nbsp;抑郁情绪的引爆点必然是秋招期间遭受的打击了,从去年九月份腾讯转正被告知失败之后就开始疯狂投递简历,每天都在经历:简历挂、一面挂、二面挂、三面挂、HR面挂,每天睁开眼就被无所适从的挫败感包围。&nbsp;秋招的特点是即便流程走到最后一步也不一定会&nbsp;offer,因为还需要进入大池子进行横向对比,俗称泡池子,而这一泡我的大多数面试流程到后面就没了后文,这一度让我感觉非常绝望。我深知自己学历并...
SoNiC_X:我已经工作快2年了,当时高考没考好没去到想去的学校,觉得天要塌了;校招找不到工作,觉得天要塌了;现在工作觉得看不到未来,觉得天要塌了;最近最大的感悟就是:天会一直塌,但是生活也会一直继续下去,还是要调整好自己的心态,不要因为一时的困难把自己困住,要记住完蛋的日子永远在后头
点赞 评论 收藏
分享
落叶随风呀:学校不好就放两栏,专业能力往前移, 政治面貌不是党员不如不写,籍贯湖南衡阳,或者湖南,浅尝辄止 基本信息排版不够美观,没有对齐 简历上花里胡哨的东西去掉 项目我不评价,因为我能力有限,且对mcu了解不足 但是这份简历掌握的水平,你可以海投试试,工作没问题但是工资应该不会高,因为搞mcu的小公司多
点赞 评论 收藏
分享
02-11 12:20
门头沟学院 Java
面试中的青提很胆小:我不信有比我们学校更逆天的,计算机专业就业第一位是我们学校二餐厅的打印店
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务