数论题目
小凯的疑惑
题面:Link
分析:
题意简述:给定两个互质的正整数$x,y$,求最大不能被表示成$ax+by$的数($a,b$满足 $0 \le a,b$ 且为整数)
不妨设$x<y$ ,答案为$ans$
如果:
$ ans \equiv mx(mod\,y) (1 \le m \le y-1)$
则
$ans = mx+ny(1 \le m \le y-1)$
注意这里的$n$可以为非正整数
显然,当$n \ge 0$时,$ans$可以表示为$ax+by$形式
所以$n < 0$
当$m=y-1,n=-1$时,$ans$取到最大值
所以要求的答案$ans=(y-1) \times x - y $
Code:
//From:201929 //2023.08.13 #include<bits/stdc++.h> #define L long long using namespace std; int main() { L x,y; scanf("%lld%lld",&x,&y); if(x>y) swap(x,y); printf("%lld",(y-1)*x-y); return 0; }
小凯的数字
题面:Link
分析:
有一个结论:
当一个数各个位上数的和整除$9$时,这个数也整除$9$.
为什么呢?其实很简单:
∵$10^x=99..9 + 1$
∴$10^{x} \equiv 1 (mod\,9)$
∴$ x \times 10^{y} \equiv x (mod\,9) $
接下来就很简单了
算出从$l$到$r$所有元素的和,再除以$9$的余数就是答案了
Warning:如果使用高斯求和公式,最后除以$2$时,要乘上$2$在$9$逆元$5$(因为$2 \times 5 \equiv 1 (mod\,9)$)
Code:
//From:201929 #include<bits/stdc++.h> #define L long long using namespace std; int main() { int t; scanf("%d",&t); while(t--) { L x,y; scanf("%lld%lld",&x,&y); L ans=((y-x+1)%9)*((y+x)%9)*5; printf("%lld\n",ans%9); } return 0; }