看这个数据范围,就是天王老子来了他也存不下啊。
所以在读入的时候就要对之取余。
介绍一下快速读入:
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罢了。害害、