[codevs1213]解的个数(数论,扩欧)
来源:互联网 发布:拍小成本电影知乎 编辑:程序博客网 时间:2024/05/20 12:49
已知整数x,y满足如下面的条件:
ax+by+c = 0
p<=x<=q
r<=y<=s
求满足这些条件的x,y的个数。
#include<iostream>#define ll long longusing namespace std;ll n,a,b,c,p,q,r,s; ll exgcd(ll a,ll b,ll &x,ll &y){ if (b==0){ x=1; y=0; return a; } ll r=exgcd(b,a%b,x,y); ll t=x; x=y; y=t-a/b*y; return r;}int pd(ll x,ll l,ll r){ if (x>=l&&x<=r) return 1; return 0;}int main(){ cin>>n; for (int i=1;i<=n;i++){ ll ans=0; cin>>a>>b>>c>>p>>q>>r>>s; c=-c; ll x=0,y=0; if (a==0&&b==0&&c!=0) { cout<<"0"<<"\n"; continue; } if (p>q||r>s){ cout<<"0"<<"\n"; continue; } if (a==0&&b==0&&c==0){ cout<<(q-p+1)*(s-r+1)<<"\n"; continue; } int d=exgcd(a,b,x,y); if (c%d!=0){ cout<<"0\n"; continue; } x=x*c/d; y=y*c/d; int t1,t2; if (b==0){ if (x>=p&&x<=q) cout<<"1\n"; else cout<<"0\n"; continue; } else if ((float)d/b>0){ t1=(p-x)*d/b; t2=(q-x)*d/b; } else{ t1=(q-x)*d/b; t2=(p-x)*d/b; } for (ll k=t1;k<=t2;k++) if (pd(x+k*b/d,p,q)&&pd(y-k*a/d,r,s)) ans++; cout<<ans<<endl; }}
阅读全文
0 0
- [codevs1213]解的个数(数论,扩欧)
- codevs1213 解的个数-----------数论/扩展欧几里得
- Codevs1213 解的个数
- [codevs1213]解的个数 二分 + exgcd
- codevs1213(扩欧,求区间内解的数量)
- 数论之因子的个数
- HDU 1299(数论,求n的素因子个数)
- hdu 1124(数论,求末尾0的个数)
- 数论之数的因子个数
- NEFU 117 素数个数的位数(数论)
- 数论之因子个数的求法
- 数论之因子个数的求法
- 数论之因子个数的求法
- 九度-1087 约数的个数[数论]
- 数论之因子个数的求法
- [BZOJ3994][SDOI2015]约数个数和(数论)
- [数论]小于n且与n互素的个数(欧拉函数)
- 约数的个数(数论中的计数问题) By ACReaper
- 图片加载框架Fresco的使用
- CrackMe ——记一次逆向练手
- C++笔试题(八).B站
- 利用快速排序找到第k大的数字
- javaSE 方法
- [codevs1213]解的个数(数论,扩欧)
- 使用ViewPager实现自动轮播
- Big Countries
- php7.1遇到的错误
- SVN库迁移整理方法总结
- matrix fast pow
- synchronized和lock以及synchronized和volatile的区别
- JDK里的设计模式
- JSON和XML有什么区别?