HDU1573X问题 解同余方程组问题
2017-07-15 13:48
183 查看
题意:问是否存在x属于(0,n]满足 x%ai=bi.ai,bi均为数组中的元素,长度为m。
思路:又是一道两个不互质的解模线性方程思路与这道类似:http://blog.csdn.net/chen_minghui/article/details/75137215
这道是加强版。要求给定范围内解的个数。上面的那道只需要求最小解。
#include<cstdio>
using namespace std;
const int maxn = 20;
int a[maxn],b[maxn];
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-=x*(a/b);
}
}
int main()
{
int t;
// freopen("in.txt","r",stdin);
scanf("%d",&t);
while(t--)
{
int n,m;
scanf("%d%d",&n,&m);
for(int i=0;i<m;i++)
scanf("%d",&a[i]);
for(int i=0;i<m;i++)
scanf("%d",&b[i]);//x=b mod (a) => a1*x+b1 = a2 *y+b2
int d,x,y;
int f=1;
for(int i=0;i<m-1;i++)
{
exgcd(a[i],a[i+1],d,x,y);
int c=b[i+1]-b[i];
if(c%d)
{
f=0;
break;
}
else
{
int t=a[i+1]/d;
if(t<0)t=-t;
x*=c/d;
x=(x%t+t)%t;
b[i+1]=a[i]*x+b[i];//m的一个特解
a[i+1]=a[i]*(a[i+1]/d);//lcm
}
}
if(f==0)
{
printf("0\n");
continue;
}
int ans=0;
if(b[m-1]<=n)
ans=1+(n-b[m-1])/a[m-1];
if(ans&&b[m-1]==0)ans-=1;
printf("%d\n",ans);
}
}
思路:又是一道两个不互质的解模线性方程思路与这道类似:http://blog.csdn.net/chen_minghui/article/details/75137215
这道是加强版。要求给定范围内解的个数。上面的那道只需要求最小解。
#include<cstdio>
using namespace std;
const int maxn = 20;
int a[maxn],b[maxn];
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-=x*(a/b);
}
}
int main()
{
int t;
// freopen("in.txt","r",stdin);
scanf("%d",&t);
while(t--)
{
int n,m;
scanf("%d%d",&n,&m);
for(int i=0;i<m;i++)
scanf("%d",&a[i]);
for(int i=0;i<m;i++)
scanf("%d",&b[i]);//x=b mod (a) => a1*x+b1 = a2 *y+b2
int d,x,y;
int f=1;
for(int i=0;i<m-1;i++)
{
exgcd(a[i],a[i+1],d,x,y);
int c=b[i+1]-b[i];
if(c%d)
{
f=0;
break;
}
else
{
int t=a[i+1]/d;
if(t<0)t=-t;
x*=c/d;
x=(x%t+t)%t;
b[i+1]=a[i]*x+b[i];//m的一个特解
a[i+1]=a[i]*(a[i+1]/d);//lcm
}
}
if(f==0)
{
printf("0\n");
continue;
}
int ans=0;
if(b[m-1]<=n)
ans=1+(n-b[m-1])/a[m-1];
if(ans&&b[m-1]==0)ans-=1;
printf("%d\n",ans);
}
}
相关文章推荐
- 【hdu1573-X问题】拓展欧几里得-同余方程组
- [HDU1573]X问题(扩展中国剩余定理)
- HDU1573:X问题(解一元线性同余方程组)
- Hdu1573 X问题
- 同余方程(线性模方程)求解青蛙约会问题
- 由微信群中的一道小问题引发的同余方程计算机解法
- hdu1573 X问题
- 带提交: hdu 1573 X问题(一元同余方程组)
- 同余方程组问题
- X问题(hdu1573线性同余方程)
- hdu1573中国剩余问题定理模数非互质的的情况
- 同余方程组解的个数 (hdu1573)
- HDU 1573 X问题 同余方程 竟然wa在条件 答案是正整数上。。无语
- hdu1573 X问题 中国剩余定理
- hdu1573 X问题(中国剩余定理解的个数)
- X问题(中国剩余定理+不互质版应用)hdu1573
- hdu1573-X问题
- hdu1573 同余方程
- hdu1573 X问题(中国剩余定理)
- HDU1573 X问题【一元线性同余方程组】