【模板】有理数取余(小白版)

2023-11-10

【模板】有理数取余(洛谷P2613)

题目链接

https://www.luogu.com.cn/problem/P2613

解题思路

不知道你是如何找到这个题解的,或者直接百度的,或者在我的其他题解里链接过来的
有理数取余这是一个知识点,也可能配合别的算法出,而让你根据有理数取余的知识输出结果(我猜的~)

言归正传
首先看题目的读入,乍一看好像很简单,cin就行啊。但是看看数据你会发现, 0≤a≤10^ 10001, 0≤ b ≤10^ 10001,这数可不是一般的大啊。因此,我们就要上点新知识了!
快读函数,对于本题来说,并没有什么类型能存下数a数b,所以只能用快读。(也可能有我不知道……)

快读函数

inline int read(){
 	int x=0,f=1;
 	char ch;
 	ch=getchar();
 	while(ch<'0'||ch>'9'){
  		if(ch=='-') f=-1;
  		ch=getchar();
 	}
 	while(ch>='0'&&ch<='9'){
  		x=(x<<3)+(x<<1)+(ch^48);//等价于x=x*10+ch-'0';
		//留个空,下面会说的
  		ch=getchar();
 	}
 	return x*f;
}

讲解一下,
1.inline 内联函数,可以理解为宏定义,比如define ll long long,在编译预处理的时候,编译器会把代码里的ll都换成long long。同理,inline和define一样的效果,只不过inline后面是函数,inline int power (){},在编译预处理的时候,代码中有power函数的地方全部被替换成整个函数,对应参数传入。值得注意的是,因为发生的是宏替换,所以在循环中调用内联函数的时候,会出现代码过长的情况,因为每一次循环调用都会把整个函数的代码展开于你的代码中,即调用几次,你的代码里就出现了多少次整个内联函数代码,这会严重消耗你的内存(准确的说,或许是程序代码区?),所以循环中尽量不要使用内联函数
开始分析快读函数代码了,
2.先看返回值吧。返回的是xf,x表示读入的绝对值,f是符号,xf就是读入的数,返回的也就是读入的数了。
快读函数的读入,都是读入的字符,因为字符读入比数字读入用时少,所以把大数的每一位当成字符读入。
两个while循环,第一个while循环的目的是滤去数字前多余的空格等符号,如果符号为负号,那么我就标记一下f=-1,用于最后的return;第二个while循环读入数字字符,上面代码中的两种形式都可以,表达的含义也是相同的。(x<<3)+(x<<1)的含义是x222+x2=x*10,与注释代码对应。ch^48实现的就是ch-'0’的操作,与注释代码对应。后面的比较好理解,十进制数乘个10,加上个个位的数,前者是后者的二进制实现,所以前者的速度会比后者快点。
3.当第二个循环结束的时候,就是再一次读取到非数字字符的时候,此时代表数字读入结束。
4.注意每个循环中都要进行读取字符操作,这样才能循环起来。

对应到本题来,还是会有问题啊,那return还是没法return这么大的数啊。其实,我们可以在我所留的空白位置加一句x=x%mod;就能实现数的缩小,还不会影响最终要求的结果。具体为什么不会影响,这与取余的运算规则有关,我实在不想细写一遍了,可以看 D题里讲解的知识点(挺重要的)

对于本题,比较特殊,我们要讨论一下无解的情况:(这个题比较全面的包括了分数取余的不同情况)
1.b是mod的倍数:若a也是mod的倍数,那么就存在b*x%mod=a%mod,两边恒等于0,所以x可以是任意整数(无穷解);若a不是mod的倍数,那么等式左边恒等于0,等式右边恒不等于0,所以不存在x使得左右相等。
2.b不是mod的倍数:因为mod是质数,所以mod与b互质,这就满足了费马小定理的前提,所以根据费马小定理变形得必存在x使上述式子成立,即有解。
因此,当且仅当b不是mod的倍数时有解
所以,如果b是mod的倍数,直接输出Angry!就行了。当b不是mod的倍数的时候,再进行计算即可。

还有新知识快速幂,不过到此为止,这个题和上面链接里的D题已经是很类似了,所以我就不多讲了,知识点都可以很详细的在上述链接里看到。(如果你是从那个链接里来的,那你就被我套娃了,hhh)

AC代码

#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int mod=19260817;
inline int read(){
 	int x=0,f=1;
 	char ch;
 	ch=getchar();
 	while(ch<'0'||ch>'9'){
  		if(ch=='-') f=-1;
  		ch=getchar();
 	}
 	while(ch>='0'&&ch<='9'){
  		x=x*10+ch-'0';
  		x%=mod;
  		ch=getchar();
 	}
 	return x*f;
}
ll ksm(ll x,ll t){
 	ll ans=1;
 	while(t>0){
  		if(t&1LL) ans=ans*x%mod;
  		x=x*x%mod;
  		t>>=1;
 	}
 	return ans;
}
int main(){
 	int a,b;
 	a=read();
 	b=read();
 	if(b==0) {cout<<"Angry!"<<endl;return 0;}
 	cout<<a*ksm(b,mod-2)%mod<<endl;
} 
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【模板】有理数取余(小白版) 的相关文章

随机推荐

  • 关系代数内容学习(交、并、差、投影、选择、连接、重命名)

    关系代数 并 差 交 投影选择 笛卡尔积 连接 重命名 什么是关系代数 是一种抽象的数据查询语言 用对关系的运算来表达查询 关系运算符分类 传统的集合运算符 U N 把关系看成元组的集合 所有运算对象必须具有相同的结构 专门的关系运算符 选
  • AJAX学习笔记1发送Get请求

    传统请求有哪些方式 及缺点 传统请求有哪些 1 直接在浏览器地址栏上输入URL 2 点击超连接 a href 上下文 请求地址 超链接请求 a gt 相对路径 a href http www baidu com 超链接请求 a gt 绝对路
  • 进阶高级测试专项,Pytest自动化测试框架总结(三)

    目录 导读 前言 一 Python编程入门到精通 二 接口自动化项目实战 三 Web自动化项目实战 四 App自动化项目实战 五 一线大厂简历 六 测试开发DevOps体系 七 常用自动化测试工具 八 JMeter性能测试 九 总结 尾部小
  • 电子信息毕设分享 STM32题目项目汇总 - 100例

    文章目录 1前言 2 STM32 毕设课题 3 如何选题 3 1 不要给自己挖坑 3 2 难度把控 3 3 如何命名题目 1前言 更新单片机嵌入式选题后 不少学弟学妹催学长更新STM32和C51选题系列 感谢大家的认可 来啦 以下是学长亲手
  • Pandas库常用函数和操作

    目录 1 DataFrame 处理缺失值 dropna 2 根据某维度计算重复的行 duplicated value counts 3 去重 drop duplicates 4 拼接 1 拼接列 merge 2 拼接行 5 找出在某一特定维
  • PCB Dk、Df和介质损耗

    介电常数Dk Dk即Dielectric constant的简称 中文名叫介电常数 又叫介质常数或介电系数 它是表示绝缘能力特性的一个系数 以字母 表示 在工程应用中 介电常数时常以相对介电常数的形式来表达 而不是绝对值 常见应用有计算阻抗
  • VS2010启动速度变慢和编译速度变慢的解决办法

    以前一直用VC6 0编写C 和MFC程序 速度非常快 后来因为要编64位程序 只能舍弃掉6 0 改VS2010 其实就功能来说 VC6 0真的够用了 VS2010的高级功能从来没用过 刚开始装VS2010的时候运行速度还算可以 但用了不到一
  • 跨线程的信号与槽

    跨线程的信号与槽 接着上面讨论的 我们如何应用驻足在其他线程里的QObject方法呢 Qt提供了一种非常友好而且干净的解决方案 向事件队列post一个事件 事件的处理将以调用我们所感兴趣的方法为主 当然这需要线程有一个正在运行的事件循环 而
  • 【云原生之Docker实战】使用docker部署Halo博客系统

    云原生之Docker实战 使用docker部署Halo博客系统 一 Halo介绍 1 Halo简介 2 Halo特点 3 本次实践说明 二 检查本地docker环境 1 检查docker版本 2 检查docker状态 3 检查docker
  • 面向对象设计原则——里氏代换原则

    里氏代换原则 Liskov Substitution Principle LSP 所有引用基类 父类 的地方必须能透明地使用其子类的对象 里氏代换原则告诉我们 在软件中将一个基类对象替换成它的子类对象 程序将不会产生任何错误和异常 反过来则
  • msvcp120.dll文件丢失如何解决?

    其实很多用户玩单机游戏或者安装软件的时候就出现过这种问题 如果是新手第一时间会认为是软件或游戏出错了 其实并不是这样 其主要原因就是你电脑系统的该dll文件丢失了或者损坏了 这时你只需下载这个msvcp120 dll文件进行安装 前提是找到
  • InvalidIndexError: (slice(None, None, None), None)

    在对照书复现代码时 1 直接将X Y画图不会报错 2 引入线性回归模型 再用拟合的数据画图就报错 原因 需要转换数据格式 import pandas as pd import matplotlib pyplot as plt import
  • 规避【虚拟专线技术】使用风险实现业务系统安全

    本文为作者学习文章 按作者习惯写成 如有错误或需要追加内容请留言 不喜勿喷 本文为追加文章 后期慢慢追加 一 技战法描述 VPN是利用Internet等公共网络基础设施 通过隧道加密通信技 术 为用户提供安全的数据通信的专用网络 可以实现不
  • 使用EasyPoi导入导出Excel

    easypoi功能如同名字easy 主打的功能就是容易 让一个没见接触过poi的人员 就可以方便的写出Excel导出 Excel模板导出 Excel导入 Word模板导出 通过简单的注解和模板 语言 熟悉的表达式语法 完成以前复杂的写法 这
  • idea Ctrl+Alt+T 快捷键失效、无法弹出surround with、与qq热键冲突-解决办法

    idea Ctrl Alt T 快捷键失效 无法弹出surround with 与qq热键冲突 解决办法 1 问题描述 2 解决方法1 3 解决方法2 1 问题描述 idea快捷键 CTRL ALT T 这个快捷键失效了 显然是热键冲突 其
  • Web中间件常见安全漏洞总结

    IIS IIS是Internet Information Services的缩写 意为互联网信息服务 是由微软公司提供的基于运行Microsoft Windows的互联网基本服务 IIS目前只适用于Windows系统 不适用于其他操作系统
  • Beyond Compare代码对比工具

    一个程序员的工作不仅仅是写代码 还有代码的检查 比较 版本日志等等 所以一个聪明的程序员会利用各种工具来简化这些工作 比如 代码的检查 我们会用一些ide 如写ios用xcode 写c 用vs 写android用android studio
  • PyQt5打开文件目录(QTreeView)并在QT界面输出文件目录并双击文件返回文件目录名

    最近发现了一个挺厉害的人工智能学习网站 内容通俗易懂 风趣幽默 感兴趣的可以点击此链接进行查看 床长人工智能教程 废话不多说 请看正文 打开整个文件目录 直接打开电脑的各个文件目录 显示出c盘 d盘等 如下图所示 代码如下 import s
  • win10与centos7的双系统U盘安装(一:制作u盘启动盘)

    博主近来在学习linux系统 当然学习第一步自然是安装系统了 博主选择的是centos7 博主自己的电脑是联想的 系统是win10专业版 在历经数次失败后 博主成功使用u盘安装了win10和centos的双系统 并且恢复了win10的启动项
  • 【模板】有理数取余(小白版)

    模板 有理数取余 洛谷P2613 题目链接 https www luogu com cn problem P2613 解题思路 不知道你是如何找到这个题解的 或者直接百度的 或者在我的其他题解里链接过来的 有理数取余这是一个知识点 也可能配