hello_world_djh

orz

关注我

luogu P1001 a+b problem题解(恶搞向)

前言

众所周知,洛谷a+b problem是一道被玩坏了的新人练手题,但题解里全是图论和数据结构的恶搞题解,在此作为一个资深数论党,我必须高呼:数论yyds!

思路

这个题保证一定是int型范围的,我们就可以想到,此题就是在膜INT_MAX的意义下求和a+b同余的最小整数解。

正确性证明

我们数论的特点是光有思路还不够,还需要有证明,在此,需要的前置知识是裴蜀定理,请看我的那篇博客
由裴蜀定理可得ax+by=c有解当且仅当gcd(a,b)|c,因为这里的a的值是1,而1和任何数的最大公因数都是1,而任何数都能整除1,所以gcd(a,b)|c

代码实现

点击查看代码
#include<iostream>
#include<climits>
using namespace std;
const int MOD=INT_MAX;
void exgcd(int a,int b,int &x,int &y)
{
	if(!b)
	{
		x=1;
		y=0;
		return;
	}
	exgcd(b,a%b,x,y);
	int tx=x;
	x=y;
	y=tx-a/b*y;
}
int main()
{
	int a,b;
	cin>>a>>b;
	int c,d;
	exgcd(1,0,c,d);
	cout<<c*(a+b)<<endl;
	return 0;
}
数论就是强,用时16ms,几乎相当于正解的时间
posted @ 2022-02-01 14:16  hello_world_djh  阅读(125)  评论(0)    收藏  举报