hdu 1576 求解模线性方程

 

题意:
已知  gcd(B, mod)=1, A%B==0,A/B *B=n(mod mod);
给出B,n;求 A/B= ans (mod mod)中的ans

题解:
求解模线性方程
先求A/B,令A/B=x
则有B*x=n(mod mod),可想到扩展欧几里德
求出x,因为这里的x是B*x=1(mod 9973)的解,x之后还要乘n
代码如下:

#include<iostream>
#include<cstdio>

using namespace std;

const int mod=9973;

__int64 a,b,c,d,x,y;
__int64 exgcd(__int64 a,__int64 b)
{
	if(b==0)
	{
		x=1;y=0;
		return a;
	}
	d=exgcd(b,a%b);
	__int64 xx=y,yy=x-a/b*y;
	x=xx;y=yy;
	return d;
}

int main()
{
	int cas;
	scanf("%d",&cas);
	while(cas--)
	{
		__int64 B,n;
		scanf("%I64d%I64d",&n,&B);
		d=exgcd(B,mod);
		x*=n;
		printf("%d\n",(x%mod+mod)%mod);
	}
	return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值