HDU 1576 A/B 扩展欧几里德算法

HDU - 1576(费马小定理求逆元) A/B 题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1576 题目: Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 9278    Accepted Submission(s)... 阅读详情

详细扩展欧几里德算法介绍,参见点击打开链接和点击打开链接

解决该题的关键是:

1、了解扩展欧几里德算法,可以运用其解出gcd(a,b)=ax1+by1中的x1、y1的值

2、由题可得以下内容:

n=A%9973,则n=A-A/9973*9973。又A/B=x,则A=Bx。所以Bx-A/9973*9973=n。即Bx-9973y=n。

到这里我们可以发现:只要求出x的值,即可算出x%9973,也就是(A/B)%9973了。顺利解决了!

3、题目关键转到如何求出x了。题目的输入是n和B,利用扩展欧几里德算法可求出gcd(B,9973)=Bx1+9973y1=1的x1。

等式两边同乘以n,得B(nx1)-9973(-ny1)=n。可知nx1就是Bx-9973y=n的解了!!!即x=nx1。

4、对于第三部得到的x可能是负数,由题这显然是不正确的。

可以做这样的转化:(x%9973+9973)%9973

(最后一点也不太懂,不懂转化后为啥任然正确!期待大神赐教)

 

AC代码:

#include<iostream>
using namespace std;

const int MOD=9973;

void extendGcd(int a,int b,int &x,int &y)   //扩展gcd,可以求出gcd(a,b)以及ax+by=gcd(a,b)中x,y的值
{
	if(b==0)
	{
		x=1;
		y=0;

		return;
	}
	else
	{
		extendGcd(b,a%b,x,y);
		
		int tmp=x;
		x=y;
		y=tmp-a/b*y;
	}
}
		
int main()
{
	int t,n,b,x,y,tmp;

	cin>>t;
	while(t--)
	{
		cin>>n>>b;

		extendGcd(b,MOD,x,y);  //解出bx+9973y=1的x

		x*=n;   //此时的x为bx1-9973y1=n中的解x1了

		tmp=(x%MOD+MOD)%MOD;   //防止x为负,有题意x必为正数

		cout<<tmp<<endl;
	}

	return 0;
}


 

 

DLMS-Blue-Book蓝皮书—曲线类 attribute_index 1 指的是第 1 个属性(即 logical_name),attribute_index 2 指的是第 2 个属性,等等;如果其他“曲线通用类”对象捕获了这个缓冲区,它们的缓冲区也将被清空,以保证它们的缓冲区条目是同质的。如果捕获对象是曲线通用类的缓冲区,则 data_index 标识缓冲区(即列)中的捕获对象(即内部曲线通用类中的列);如果曲线通用类已排序,则调用捕获方法将把新条目存储在缓冲区中的适当位置,移动所有后续条目,并可能丢失最不相关的条目。 阅读详情

相关推荐

电子工程师日记:用STM32F4的DCMI接口驱动OV2640时,那些数据同步的坑我都踩过了

本文分享了使用STM32F4的DCMI接口驱动OV2640摄像头时,在数据同步方面遇到的典型问题与解决方案。作者通过示波器分析PCLK相位、纠正DCMI_CR寄存器中同步信号极性的配置误区,并排查DMA传输瓶颈与FIFO溢出,最终实现了稳定的图像采集。文章为嵌入式工程师提供了宝贵的硬件调试经验与配置清单。

weixin_29189377的博客 156

[Java]HDU 1576 (费马小定理 + 扩展欧几里得)

思路: (A/B)%9937 = A*B-1 %9973. 这里的B-1 代表乘法逆元,而不是1/B. 乘法逆元:A除以一个数模P,等于A乘以这个数的乘法逆元模P。 所以我们只需要求解出B对于9973的乘法逆元B-1即可。 解法一:费马小定理求解乘法逆元 若a是一个整数,b是一个质数,那么 ab ≡ a(mod b) 或 ab-1≡1 (mod b) 由扩展欧几里得可以得出: 因为gcd(a,...

Tizzi的博客 992

Win10环境下VS2019离线部署OnnxRuntime的完整指南

本文提供了在Windows 10系统下,为Visual Studio 2019进行OnnxRuntime离线部署的完整教程。针对网络受限环境,详细讲解了如何获取正确的离线安装包、配置本地NuGet源,并逐步指导项目配置与测试,确保AI模型在C++环境中顺利运行。

weixin_29205061的博客 401

寒假训练HDU-1576题解

问题链接:HDU-1576 思路 这道题可以用欧几里得扩展来算,但是看到网上的题解有一个方法感觉挺简单的,题解作者叫试探法。和欧几里得扩展一样,也是求方程,然后求解。根据题意,输入的n=A%9973(没有输入A),A%B=0(A必能被B整除),B与9973互素(GCD(B,9973)=1)。设x=(A/B)%9973(x是最终想计算的值,满足0&lt;=x&lt;=9972),则9973k+x=A...

weixin_43970556的博客 269

手把手教你用树莓派蓝牙抓取小米温湿度计2代数据,接入HomeAssistant(附密钥获取避坑指南)

本文详细介绍了如何通过树莓派蓝牙抓取小米温湿度计2代数据并接入HomeAssistant的完整流程。重点解析了获取32位加密密钥的三种方法,包括使用Telink Flasher工具、米家APP抓包和开源工具ATC_MiThermometer,并提供了HomeAssistant集成配置和常见问题排查指南,帮助用户实现稳定可靠的温湿度监测。

一名菜鸟攻城师 779

准静态电磁场

叠加法 缺点:对于连续分布的电荷,叠加法的计算比较困难 虚位移法 概念 广义坐标:确实系统中导体形状、尺寸与位置的一组独立几何量。 广义力:企图改变某一广义坐标的力。 功:广义力乘上由它引起的广义坐标的改变量。 公式 ...

qq_35912930的博客 1860

HDU - 1576

HDU - 1576 要求(A/B)%9973,但由于A很大,我们只给出n(n=A%9973)(我们给定的A必能被B整除,且gcd(B,9973) = 1)。 Input数据的第一行是一个T,表示有T组数据。  每组数据有两个数n(0 Output对应每组数据输出(A/B)%9973。 Sample Input 2 1000 53 87 123456789 Samp

qq_35916858的博客 343

华大HC32F460串口超时中断+DMA收发实战:从STM32迁移的避坑指南

本文为从STM32迁移至华大HC32F460的开发者提供了串口DMA收发的实战避坑指南。核心在于理解HC32F460以串口接收超时中断替代空闲中断的机制,并调整DMA配置策略:DMA应设置为由串口接收事件持续触发搬运,超时中断仅负责通知和重置DMA,从而实现高效可靠的数据收发。

weixin_29175469的博客 114

HDU 1576 (乘法逆元)

题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1576 题目大意:求(A/B)mod 9973。但是给出的A是mod形式n,n=A%9973。 解题思路: 两种思路,一种从乘法逆元角度,另一种从扩展GCD推公式角度。 ①乘法逆元: 先来看下逆元和乘法逆元的关系,对于A*X=B,有X=A-1*B,A-1就是普通的逆元了,在这里就是倒数。 ...

weixin_33827965的博客 187

学Simulink——十二脉波整流电路(移相变压器)谐波抵消仿真

Y:Δ = 1:√3(若 DC 同压)— 此处同相电压故 220V(Y)=220V(Δ phase)Y(相电压=220V)、Δ(线电压=380V ⇒ 相=220V,30° 移相)可经 Lbal​=0.5mH(平衡电抗)或直接短(大 L_dc 下均流尚可)✅ 直流输出纹波频率 = 12·f_line(vs 6·f_line)直流输出 → Ldc​=50mH→Cdc​=2200µF→R=30Ω。Line‑Line RMS = 380 V(⇒ 相=220V)Vdc​≈1.35⋅380≈513V(同 6‑脉波)

xiaoheshang_123的博客 60

​​​​手把手教你玩转RT-Thread操作系统专栏--​​​​第5章 设备驱动开发:RT-Thread的设备框架​​​​5.4 I2C/SPI驱动:如何驱动外部传感器(以MPU6050为例)​

通过本节学习,掌握了基于RT-Thread设备模型的I2C/SPI驱动开发流程,包括硬件初始化、寄存器读写、设备注册及应用程序调用。I2C(Inter-Integrated Circuit)和SPI(Serial Peripheral Interface)是嵌入式系统中最常用的两种串行总线协议,广泛用于连接传感器、存储器等外设。函数通过I2C协议读取外设寄存器的数据(如MPU6050的加速度寄存器)。SPI读取需先拉低片选(CS),发送寄存器地址,再读取数据,最后拉高CS。查找I2C设备,并调用。

xiaoheshang_123的博客 127

A/B(HDU 1576 扩展欧几里德算法)

题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1576 题面: 思路: 这道题目考察了扩展欧几里得算法的知识,求先了解相关知识再来写这道题目 解题思路 1.首先n=A%9973,那么n也等于A-A/9973*9973,这时候出现一个等式 A-A / 9973 * 9973=n 我们设A/B=x,那么A=Bx,等式就转换为 Bx-A/9973 * ...

kunyuwan的博客 4141

学 Simulink—— 基于高频方波电压注入的表贴式永磁电机无感控制仿真

本文手把手教授基于Simulink的高频方波电压注入法实现表贴式永磁同步电机(SPMSM)无传感器控制。针对表贴式电机微弱凸极特性(Lq/Ld≈1.05-1.15),详解方波注入相比正弦注入的优势:通过5kHz方波(PWM频率半值)集中能量提升信噪比,并采用相邻周期电流直接相减的零延迟分离技术。系统架构包含高频注入器、无滤波器信号分离模块、锁相环观测器和磁饱和极性辨识等关键环节,提供参数设置经验(如注入幅值10-15%Vdc)和典型性能指标(位置误差<0.2rad)。特别强调工程实现要点:PWM同步时

xiaoheshang_123的博客 168

hdu 1576 A/B 扩展欧几里德算法

数论的题目,问的很明显。因为n=A%9973,所以A-A/9973*9973=n,(计算机的除法直接取整)。又因为A=k*B,并且B*x+9973*y=1,题目问的是(A/B)%9973也就是k%9973是多少,现在A-A/9973*9973=n,转化为B*k-9973*y=n,也就是把A/9973看成整体就好了。又有B*x+9973*y=1,这个x和y可以用扩展欧几里德直接求出,k=n*x,关键

kungfu panda 1576

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

HDU1576A/B【扩展欧几里德算法模板】

思路:设(A/B)%9973 = K, 则A/B = k + 9973x  (x未知), 因此A = kB + 9973xB, 又A%9973 = n, 所以kB%9973 = n,  故kB = n + 9973y (y未知) 故(k/n)B +(-y/n)*9973 = gcd(B,9973) = 1 扩展欧几里得 求出k/n,  再乘以个n,记得取模,就是answer了

*乘号的笔记本 383

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

HDU 1576 A/B 扩展欧几里德算法

A/B Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 2017    Accepted Submission(s): 1469 Problem Description 要求(A/B)%9973,但由于A很大,我们只给出n

我妈嫌我不A题 915

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

HDU1576 A/B【扩展欧几里得算法】

问题链接:HDU1576 A/B 问题简述:参见上述链接。 问题分析:这个问题可以用解整数的不定方程来解决,即使用扩展欧几里德算法。 根据题意,输入的n=A%9973(没有输入A),A%B=0(A必能被B整除),B与9973互素(GCD(B,9973)=1)。 解题过程首先是建立方程,然后才能编写程序。 设x=(A/B)%9973(x是最终想计算的值),则...

weixin_33941350的博客 156

HDU 1576 A/B (扩展欧几里德算法)

连接:http://acm.hdu.edu.cn/showproblem.php?pid=1576 Sample Input 2 1000 53 87 123456789   Sample Output 7922 6060题意:要求(A/B)%9973,但由于A很大,我们只给出n(n=A%9973)(我们给定的A必能被B整除,且gcd(B,9973) =

Dosth_Magic 697

hdu1576 A/B 扩展欧几里德算法

Problem Description 要求(A/B)%9973,但由于A很大,我们只给出n(n=A%9973)(我们给定的A必能被B整除,且gcd(B,9973) = 1)。 Input 数据的第一行是一个T,表示有T组数据。 每组数据有两个数n(0 Output 对应每组数据输出(A/B)%9973。 Sample Input Sample O

winycg的博客 658

扩展欧几里德算法模版题(求逆元+分析+题目)HDU1576 A/B

首先给大家普及一下什么是扩展欧几里德算法,它是由欧几里德算法演变的,即我们常说的辗转相除法。 代码如下: int gcd(int a,int b){     return b?gcd(b,a%b):a; } 那么对于不完全为0的非负整数,a,b,gcd(a,b)表示a,b的最大公约数,必然存在整数对x,y使得  gcd(a,b)=ax+by  代码如下:

Singular__point的博客 3629

HDU 1576 A/B 扩展欧几里德算法 模线性方程入门题

很详细的资料:http://blog.youkuaiyun.com/lulipeng_cpp/article/details/7612490 补充以下结论,自己推的,解释了以上博客里的疑惑。  方程ax+by=gcd(a,b),即 模线性方程ax≡d(mod b) ,令d = gcd(a,b)。假设 模线性方程的解为 x0, y0。 结论1:则有 max( abs(x0),abs(y0) )  结论2

Nicolas 1208

HDU1576 A/B (解法二)【试探法】

问题链接:HDU1576A/B 问题简述:参见上述链接。 问题分析:之前给出来一个用扩展欧几里德算法解本问题的方法,时间上则比较慢。试探法有时也是高效率的。 根据题意,输入的n=A%9973(没有输入A),A%B=0(A必能被B整除),B与9973互素(GCD(B,9973)=1)。 解题过程首先是建立方程,然后才能编写程序。 设x=(A/B)%9973(x是最...

weixin_33812433的博客 70
上一篇: HDU 1319 Prime Cuts
下一篇: HDU 2964 Prime Bases
lulipeng_cpp
博客等级 码龄15年 169粉丝 130原创
评论 7
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值