解的个数(扩展欧几里得解不定方程)
来源:互联网 发布:日系淘宝店铺推荐 编辑:程序博客网 时间:2024/05/01 20:01
解的个数
题目描述:
已知整数x,y满足如下面的条件:
ax+by+c = 0
p<=x<=q
r<=y<=s
求满足这些条件的x,y的个数。
输入描述:
第一行有一个整数n(n<=10),表示有n个任务。n<=10
以下有n行,每行有7个整数,分别为:a,b,c,p,q,r,s。均不超过108。
输出描述:
共n行,第i行是第i个任务的解的个数。
样例输入:
2
2 3 -7 0 10 0 10
1 1 1 -10 10 -9 9
样例输出:
1
19
#include<iostream>#include<cstdio>#define lon long longusing namespace std;int t,x,y,g,ans;int a,b,c,l1,l2,r1,r2;int ex_gcd(int a,int b,int &x,int &y){ if(b==0) { x=1; y=0; return a; } int r=ex_gcd(b,a%b,x,y); int t=x;x=y;y=t-a/b*y; return r;}int main(){ scanf("%d",&t); while(t--) { ans=0; scanf("%d%d%d%d%d%d%d",&a,&b,&c,&l1,&r1,&l2,&r2); c=-c; if(a==0&&b==0) { if(c!=0||l1>r1||l2>r1) { printf("0\n"); continue; } long long t1=r1-l1+1,t2=r2-l2+1; long long t3=t1*t2; cout<<t3; printf("\n"); continue; } if(a==0) { y=c/b; if(y<l2||y>r2||c%b!=0) printf("0\n"); else printf("1\n"); continue; } if(b==0) { x=c/a; if(x<l1||x>r1||c%a!=0) printf("0\n"); else printf("1\n"); continue; } g=ex_gcd(a,b,x,y); if(c%g!=0) { printf("0\n"); continue; } int s=c/g; x=x*s,y=y*s; int ta=a/g,tb=b/g; if(x<l1) { while(x<l1) x+=tb,y-=ta; for(int i=x;i<=r1;i+=tb,y-=ta) if(y>=l2&&y<=r2) ans++; } else if(x>r1) { while(x>r1) x-=tb,y+=ta; for(int i=x;i>=l1;i-=tb,y+=ta) if(y>=l2&&y<=r2) ans++; } else { int ty=y; for(int i=x;i<=r1;i+=tb,ty-=ta) if(ty>=l2&&ty<=r2) ans++; ty=y+ta; for(int i=x-tb;i>=l1;i-=tb,ty+=ta) if(ty>=l2&&ty<=r2) ans++; } cout<<ans; printf("\n"); } return 0;}
1 0
- 解的个数(扩展欧几里得解不定方程)
- C. Line(扩展欧几里得求不定方程的解)
- CF7C 扩展欧几里得解不定方程
- hdu-2142(扩展欧几里得解不定方程)
- poj 1061 青蛙的约会(扩展欧几里得解不定方程)
- 青蛙的约会(扩展欧几里得算法+不定方程求解)
- POJ 1061 扩展欧几里得算法解不定方程
- 51nod 1352 扩展欧几里得解不定方程
- hdu-4596(扩展欧几里得解一次不定方程)
- 扩展欧几里得应用解不定方程(uva12169,Disgruntled Judge,NWERC 2008)
- 扩展欧几里得求模方程的解
- 青蛙的约会(扩展欧几里得解同余方程)
- 扩展欧几里得 解方程小记
- SGU 106 扩展欧几里得 不定方程
- 关于不定方程整数解的个数的求法
- Codevs 1213 解的个数 扩展欧几里得
- codevs1213 解的个数-----------数论/扩展欧几里得
- poj 1601(扩展欧几里德求不定方程的整数解)
- Centos6.5下安装jdk1.8
- Swfit 3.0 软键盘挡住视图的解决办法
- 根据返回的电量,实现充电状态,充电完成电量显示
- Spring 全注解配置 bean 和 调用 (8) @Aspect注解不生效解决办法 和 no-static 的警告解决办法
- Stark_【指针】一点个人的指针学习记录
- 解的个数(扩展欧几里得解不定方程)
- webpack构建vue项目(配置篇)
- 大文件 and 多下载任务的封装(一)---线程池的封装(ThreadPool,TheadManager)
- C++继承
- 二分查找
- c# 多线程 调用带参数函数
- PMP笔记:启动过程组检查事项
- Guided Filter
- curl使用