其他分享
首页 > 其他分享> > P2613 【模板】有理数取余

P2613 【模板】有理数取余

作者:互联网

在这里插入图片描述
在这里插入图片描述


看这个数据范围,就是天王老子来了他也存不下啊。
所以在读入的时候就要对之取余。
介绍一下快速读入:
int的快速读入
全文背诵。

inline int getint()
{
    int res=0,ch=getchar(); //ch用来过滤其他字符
    while(!isdigit(ch)&&ch!=EOF)
        ch=getchar();
    while(isdigit(ch))
    {
        res=(res<<3)+(res<<1)+(ch-'0');
        ch=getchar();
    }
    return res;
}
int a = getint();//== scanf("%d",&a);

在这里插入图片描述
具体操作看图。
最后的结果就是求ax
不过x要取一下正。

a(x%mod+mod)%mod;
#include<iostream>
#include<cstring>
#include<algorithm>
#define mod 19260817
using namespace std;
typedef long long int ll;
ll x,y;
inline int getint()
{
    int res=0,ch=getchar();
    while(!isdigit(ch)&&ch!=EOF)
        ch=getchar();
    while(isdigit(ch))
    {
        res=(res<<3)+(res<<1)+(ch-'0');
        res %= mod;
        ch=getchar();
    }
    return res;
}
void exgcd(ll a ,ll b)
{
    if(b==0)
    {
        x=1;y=0;return;
    }
    exgcd(b,a%b);
    ll temp=y;
    y=x-(a/b)*y;
    x=temp;
}
int main()
{
    int a,b;
    a=getint();b=getint();
    a%=mod;
    b%=mod;
    exgcd(b,mod);
    cout<<a*(x%mod+mod)%mod;
}

会了拓展欧几里得很简单。
拓展欧几里得其实和欧几里得没啥大的区别,无非就是求出了具体的x,y而已。本质还是ax+by=gcd(a,b)。不过最后求了个x和y罢了。害害、

标签:ch,有理数,int,res,P2613,isdigit,取余,getchar,mod
来源: https://blog.csdn.net/qq_45895217/article/details/121322140