HDU-1567-A/B——算法笔记
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1576
题目描述:
要求(A/B)%9973,但由于A很大,我们只给出n(n=A%9973)(我们给定的A必能被B整除,且gcd(B,9973) = 1)。
输入:
数据的第一行是一个T,表示有T组数据。
每组数据有两个数n(0 <= n < 9973)和B(1 <= B <= 10^9)。
输出:
对应每组数据输出(A/B)%9973。
样例:
题解:
已知 gcd ( B, 9973 ) = 1,n、B 的值都知道,且n = A % 9973,要求出 (A / B) % 9973 的值。由于不知道 A 的值,所以要把 A 值换掉。
设 ans = (A / B) % 9973;
则存在 X 使得: A / B = 9973 * X + ans;
转换一下 得到 : A = 9973 * X * B + ans * B. // 式 1
又由于: n = A % 9973.
则存在 Y 使得: A = 9973 * Y + n. // 式 2
式 1 和 式 2 结合起来,就消去了 A ,再整理一下得到:
n = ans * B + (B * X - Y) * 9973.
两边同时除以 n 得到 : 1 = (ans / n) * B + [ (B * X - Y) / n ] * 9973.
令 x = (ans / n) ,y = [ (B * X - Y) / n ]
,式子就变为:1 = x * B + y * 9973
. 而 gcd( B, 9973) = 1,刚好符合扩展欧几里得算法求解。于是就可以求出 x 即 ans / n 的值,又 n 知道,就可以求出 ans 的值了。最后不要忘记 ans 要是个正数,要处理一下才行。既然最后结果是要 对 9973取模,那么可以对ans 这样操作取正:ans = (ans % mod + mod ) %mod.
参考代码:
#include <iostream>
#include <algorithm>
#include <string>
#include <vector>
#include <stack>
#include <queue>
#include <map>
#include <set>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <cmath>
using namespace std;#define INF 0x3f3f3f
#define ll long long
#define clean(arrays) memset(arrays, 0, sizeof(arrays))const int MAX_NUM = 1e5 + 5;
const int mod = 9973;// 求解得到的 x 就是 a 的逆元,y 就是 b 的逆元。
ll exgcd(ll a, ll b, ll &x, ll &y)
{if(b == 0){x = 1;y = 0;return a;}ll r = exgcd(b, a % b, x, y);ll t = x;x = y;y = t - a / b * y;return r;
}int main()
{int t;cin >> t;while (t--){ll n;ll b;ll x, y;cin >> n >> b;exgcd(b, mod, x, y);x *= n;ll results = (mod + (x % mod)) % mod; //对 x 值进行调整,避免是负数cout << results << endl;}
}
HDU-1567-A/B——算法笔记相关推荐
- 算法笔记--二分图判定
算法笔记 挑战程序设计p98 #include<bits/stdc++.h> using namespace std; #define ll long long #define ls rt ...
- 《算法笔记》中文版 - 包括数组,链表,树,图,递归,DP,有序表等相关数据结构与算法的讲解及代码实现...
来源:专知本文为资源,建议阅读5分钟本文为你分享<算法笔记>中文版. https://github.com/Dairongpeng/algorithm-note 目录概览 第一节 复杂度. ...
- 数据结构与算法笔记 - 绪论
数据结构与算法笔记 - 绪论 1. 什么是计算 2. 评判DSA优劣的参照(直尺) 3. 度量DSA性能的尺度(刻度) 4. DSA的性能度量的方法 5. DSA性能的设计及其优化 x1. 理论模型与 ...
- 数据结构与算法笔记(十六)—— 二叉搜索树
一.二叉搜索树定义 二叉搜索树(Binary Search Tree),又名二叉排序树(Binary Sort Tree). 二叉搜索树是具有有以下性质的二叉树: 若左子树不为空,则左子树上所有节点的 ...
- 数据结构与算法笔记(十五)—— 散列(哈希表)
一.前沿 1.1.直接寻址表 当关键字的全域U比较小时,直接寻址是一种简单而有效的技术.假设某应用要用到一个动态集合,其中每个元素都有一个取自全域U={0,1,-,m-1)的关键字,此处m是一个不很大 ...
- 《algorithm-note》算法笔记中文版正式发布!
无论是做机器学习.深度学习.自然语言处理还是其它领域,算法的重要性不言而喻!吃透算法底层原理.掌握算法数学推导和代码实现,对提高自己的硬核实力来说非常重要!今天给大家推荐一个超赞的开源算法笔记!中文版 ...
- 【算法】《algorithm-note》算法笔记中文版正式发布!
无论是做机器学习.深度学习.自然语言处理还是其它领域,算法的重要性不言而喻!吃透算法底层原理.掌握算法数学推导和代码实现,对提高自己的硬核实力来说非常重要!今天给大家推荐一个超赞的开源算法笔记!中文版 ...
- c++ string 删除字符_算法笔记|(5)第二章C、C++的快速入门字符数组的存放方式string.h文件...
字符数组的存放方式 由于字符数组是由若干个char类型的元素组成的,因此字符数组的每一位都是一个char字符,除此之外,在一维字符数组或者二维字符数组的第二维的末尾都有一个空字符\0表示存放的字符串的 ...
- 算法笔记(JavaScript版)——排序
算法笔记(JavaScript版)--排序 本文内容根据Rebert Sedgewick和Kevin Wayne的<算法(第四版)>整理,原代码为java语言,自己修改为JavaScrip ...
- 三维重建7:Visual SLAM算法笔记
VSLAM研究了几十年,新的东西不是很多,三维重建的VSLAM方法可以用一篇文章总结一下. 此文是一个好的视觉SLAM综述,对视觉SLAM总结比较全面,是SLAM那本书的很好的补充.介绍了基于滤波器的 ...
最新文章
- 50个顶级开源营销应用程序
- make 编译可执行
- java实现高斯赛德尔算法解线性方程组
- [译] Android 上一次编写,随处测试
- java scan hbase_hbase+java实例,Scan查询所有、get根据rowkey查询一行或一列数据
- python两大特性与四大语法_Day 1:Python 两大特性和四大基本语法
- 2017-7-18-每日博客-关于Linux下的通配符.doc
- iptables转发基础
- Windows中MySQL主从数据库搭建(三)
- mes系统服务器架构,MES系统三大层结构是什么
- 计算机usb接口无法充电,电脑可充电USB接口不能使用怎么办
- mac 设置网红屏保
- 什么是 Skype?
- [编程题] 头条校招
- 【OpenCV】 全景拼接——多张图像拼接
- 关于trunk的几个端口模式
- 这大概是你见过最全面的 Python 重点了
- IE浏览器-官网下载地址
- VS下glut freeglut GLtools glew等 配置教程
- 小程序、微信公众号调用监控摄像头直播开放接口文档
热门文章
- SQL service基础(二)对数据指定列查询、条件查询、查询结果排序、聚集函数查询、分组统计查询
- 每天劝你辞职的同事,反而是公司待最久的
- 妙啊!巧用 SSH 突破限制穿透内网
- java newline_Java BufferedWriter newLine()方法
- 微信小程序接收二进制流文件(图片预览,文件打开)
- webpack打包vue项目之后dist文件夹在本地跑起来
- three.js绘制墙体,通过不规则路径生成墙体,3D墙体绘制
- 如何优雅的创建一个Java不可变对象类,JDK源码中也是这么干的!
- Android旅游自助项目之订票系统订票功能实现
- java EE crm代码_基于jsp的小型企业CRM系统-JavaEE实现小型企业CRM系统 - java项目源码...