博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
HDU1576 A/B【扩展欧几里得算法】
阅读量:6165 次
发布时间:2019-06-21

本文共 946 字,大约阅读时间需要 3 分钟。

问题链接

问题简述:参见上述链接。

问题分析这个问题可以用解整数的不定方程来解决,即使用扩展欧几里德算法。

根据题意,输入的n=A%9973(没有输入A),A%B=0(A必能被B整除),B与9973互素(GCD(B,9973)=1)。

解题过程首先是建立方程,然后才能编写程序。

设x=(A/B)%9973(x是最终想计算的值),则9973k+x=A/B(k为整数),得A=9973Bk+xB。

因为n=A%9973与A=9973Bk+xB,所以xB%9973=n,得xB=n+9973y。

故:(x/n)B+(-y/n)9973=1=GCD(B,9973),该方程有解。

要求x和y,先求X=x/n和Y=-y/n,即先解方程BX+9973Y=1。

最后,x=X*n。

需要注意的是,求得的x有可能是负值,需要进行调整。

不过,这个计算方法好像比较花时间。

程序说明:(略)。

AC的程序如下:

#include 
// 递推法实现扩展欧几里德算法long exgcd(long a, long b, long *x, long *y){ long x0=1, y0=0, x1=0, y1=1; long r, q; *x=0; *y=1; r = a % b; q = (a - r) / b; while(r) { *x = x0 - q * x1; *y = y0 - q * y1; x0 = x1; y0 = y1; x1 = *x; y1 = *y; a = b; b = r; r = a % b; q = (a - r) / b; } return b;}int main(void){ int t, i; long n, b, a=9973, x, y; scanf("%d", &t); for(i=0; i

转载于:https://www.cnblogs.com/tigerisland/p/7564930.html

你可能感兴趣的文章
数据库 : 事物以及隔离性导致的问题
查看>>
Jquery乱码终极解决方案
查看>>
Android Fragment 真正的完全解析(上) (转载)
查看>>
多线程依次打印abcabc
查看>>
一:学习Linux前准备工作
查看>>
how to install wireless driver for Dell 630 in Ubuntu
查看>>
Kafka 配置参数汇总及相关说明
查看>>
弄清 CSS3 的 transition 和 animation
查看>>
服务器指定网卡进行备份数据避免影响业务口
查看>>
在Sublime Text 2下面开发Sass
查看>>
四则运算个人项目3
查看>>
eclipse 构建maven web工程
查看>>
237. Delete Node in a Linked List
查看>>
angular2-动画
查看>>
基于mykernel的时间片轮转调度
查看>>
jquery中的全局事件
查看>>
libgdx 3D CameraInputController WASD控制器
查看>>
CF1080
查看>>
IOS KVO与NSNotificationCenter简单使用
查看>>
Python3 学习
查看>>