P2613 【模板】有理数取余

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);

P2613 【模板】有理数取余
具体操作看图。
最后的结果就是求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罢了。害害、

上一篇:c语言学习(循环语句while1)


下一篇:字符串反转