标签:mono desc define des gcd 做了 image inpu build
逆元模板题 hdu1576
#include<bits/stdc++.h>
#define int long long
using namespace std;
int b,a;
void exgcd(int a,int b,int &d,int &x,int &y)
{
if(!b)d=a,x=1,y=0;
else exgcd(b,a%b,d,y,x),y-=(a/b)*x;
}
int inv(int a,int n)
{
int d,x,y;
exgcd(a,n,d,x,y);
return d==1?(x+n)%n:-1;
}
main()
{
int n;
cin>>n;
while(n--)
{
cin>>a>>b;
int x=inv(b,9973);
printf("%lld\n",(a*x)%9973);
}
return 0;
}
线段树HDU5475
搜过来的题目试求逆元,但是细想发现不对劲,因为你除再取mod是不可以的(可以想一下为什么),于是我就不知道怎么做了,看了网上的题解神奇的发现是线段树???然后单点更新,维护乘积就可以了。。
写的时候不知道scanf %lld为什么萎了,然后就用cin水过去了。。本以为会卡时间。。
#include<bits/stdc++.h>
#define mid (l+(r-l)/2)
#define ls (rt<<1)
#define rs (rt<<1|1)
#define int long long
using namespace std;
int tr[500000<<2],n,t,mod,t1,t2;
void build(int l,int r,int rt)
{
tr[rt]=1;if(l==r) return ;
build(l,mid,ls),build(mid+1,r,rs);
}
void update(int l,int r,int rt,int L,int C)
{
if(l==r){tr[rt]=C;return ;}
if(L<=mid) update(l,mid,ls,L,C);
else update(mid+1,r,rs,L,C);
tr[rt]=(tr[ls]*tr[rs])%mod;
}
main()
{
scanf("%lld",&t);
for(int kkk=1;kkk<=t;kkk++)
{
printf("Case #%lld:\n",kkk);
cin>>n>>mod;
build(1,n,1);
for(int i=1;i<=n;i++)
{
scanf("%lld%lld",&t1,&t2);
if(t1==1) update(1,n,1,i,t2);
if(t1==2) update(1,n,1,t2,1);
cout<<tr[1]%mod<<"\n";
}
}
return 0;
}
欧拉定理的证明


摘自网络
标签:mono desc define des gcd 做了 image inpu build
原文地址:http://www.cnblogs.com/foreverpiano/p/7133917.html