数论题目

小凯的疑惑

题面: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;
}
Code

 小凯的数字

题面: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;
}
Code

 

posted @ 2023-08-13 22:33  201929  阅读(7)  评论(0编辑  收藏  举报