原题链接 https://www.luogu.org/problemnew/show/P2613

在这里虽然是讲洛谷的题解,但用到的数论知识,归并到数论里也不为过!

进入正题:

首先看到题面:给出一个有理数c=a/b,求c mod 19260817的值。

看一下数据范围

我滴天!!!又要写高精???GG无疑!!!

咦,既然要取余,还做乘法运算,那只要写个快读在读入时取膜不就好啦,这样就爆不了long long 了。

有理数求余???搞笑呢,不是只有整数求余嘛?

我们知道有理数包含整数和分数,那么分数求余我们都知道是没有什么意义的。

那肿么办呢?——转化!!!

前面说过这是一道数论题,那么解此题一定要用到数论知识!!!

在我发现的数论知识里,可以用以下两个知识来解此题:

1.费马小定理

如果p是一个质数,而整数a不是p的倍数,则有a^(p-1)≡1(mod p)。

此题已经明确给出mod数19260817,显然它是一个质数,那么我们就可以用费马小定理转化一下,如下:

因为a^(p-1)≡1(mod p)

所以a^(p-2)≡a^(-1) (mod p)    (A)

所以c=a/b=a*b^(-1)≡a*b^(p-2) (mod p)

证毕!

所以我们就可以将在膜p意义下的a/b转化成a*b^(p-2)的形式,所以我们只要求出b^(p-2)就大功告成啦,具体做法用快速幂。

2.扩展欧几里德

上面已经证过求在膜p意义下的a/b就是求a*b^(-1),b^(-1)就是b的逆元

下面给出求b的逆元的一种方法:

若存在一个数x,满足bx≡1 (mod p),那么x就是b的逆元

可将bx≡1 (mod p)进一步转化:

bx-1≡0 (mod p)

bx-1=-yp    (注:这里说一下为什么是-y,其实这里是不是正负无所谓,写成负的更便于理解)

bx+py=1

化简到这里我们就知道要用扩展欧几里德做了,求出了b的逆元x后再乘a取膜就是最后答案啦,下面看代码:

#include<iostream>
#include<cstdio>
using namespace std;
const long long mod=;
inline long long read() //快读,边读边取余
{
long long t=;
char ch=getchar();
while(ch<''||ch>'') ch=getchar();
while(ch>=''&&ch<='')
{
t=(t*+(ch-''))%mod;
ch=getchar();
}
return t;
}
int exgcd(long long a,long long b,long long &x,long long &y) //扩展欧几里德算法,求b的逆元
{
if(b==)
{
x=;y=;
return a;
}
long long r=exgcd(b,a%b,x,y);
long long q=x;
x=y;
y=q-a/b*y;
return r;
}
int main()
{
long long a,b,x,y;
a=read();
b=read();
if(b==) //一步特判,因为b是分母不能是0,如果b==0则无解
{
cout<<"Angry!";
return ;
}
exgcd(b,mod,x,y);
x=(x%mod+mod)%mod; //这步操作是确保x是b的逆元中最小的正整数
printf("%lld",(a%mod*x%mod)%mod); //记得多膜几次哦
return ;
}

其实作为一个提高+/省选-是不是有点夸大了?

P2613 有理数取余的更多相关文章

  1. 洛谷P2613有理数取余

    传送门 #include <iostream> #include <cstdio> #include <cstring> #include <algorith ...

  2. 洛谷 P2613 【模板】有理数取余

    P2613 [模板]有理数取余 题目描述 给出一个有理数c=\frac{a}{b}c=ba​,求c\ \bmod 19260817c mod19260817的值. 输入输出格式 输入格式: 一共两行. ...

  3. 洛谷——P2613 【模板】有理数取余

    P2613 [模板]有理数取余 读入优化预处理 $\frac {a}{b}\mod 19620817$ 也就是$a\times b^{-1}$ $a\times b^{-1}\mod 19620817 ...

  4. P2613 【模板】有理数取余 (数论)

    题目 P2613 [模板]有理数取余 解析 简单的数论题 发现并没有对小数取余这一说,所以我们把原式化一下, \[(c=\frac{a}{b})\equiv a\times b^{-1}(mod\ p ...

  5. 题解 P2613 【【模板】有理数取余】

    题目链接 我们先看这个式子: $c=\dfrac{a}{b}$ $ $ $ $ $mod$ $ $ $ $ $19260817$ 某正常高中生:这$……$ --- 对于这个 $c$ . 显然,它很可能 ...

  6. 题解——洛谷P2613 【模板】有理数取余(扩展欧几里得算法+逆元)

    题面 题目描述 给出一个有理数 c=\frac{a}{b}  ​ ,求  c mod19260817  的值. 输入输出格式 输入格式: 一共两行. 第一行,一个整数 \( a \) .第二行,一个整 ...

  7. P2613 【模板】有理数取余

    题目描述 给出一个有理数 $c=\frac{a}{b}$ ,求 c mod 19260817 的值. 输入输出格式 输入格式: 一共两行. 第一行,一个整数 aa .第二行,一个整数 bb . 输出格 ...

  8. 数学【p2613】 【模板】有理数取余(费马小定理)

    题目描述 给出一个有理数 c=a/b ,求 c mod 19260817的值. 说明 对于所有数据, 0≤a,b≤10^10001 分析: 一看题 这么短 哇简单!况且19260817还是个素数!(美 ...

  9. Luogu P2613 【模板】有理数取余

    题目链接 \(Click\) \(Here\) 真心没啥东西,只要能\(Get\)到在数字输入的时候按位取模,以及除数也可以直接取模就可以了.(把每个数看做乘法原理和加法原理构造起来的即可.) #in ...

随机推荐

  1. 集成Android人脸识别demo分享

    本应用来源于虹软人工智能开放平台,人脸识别技术工程如何使用? 1.下载代码 git clone https://github.com/andyxm/ArcFaceDemo.git 2.下载虹软人脸识别 ...

  2. linux快捷进入长目录的方法

    快捷命令   :alias chaoyang ='cd /usr/lib/uu/hh/lib' 1.将上述设置写到家目录的.bashrc文件中(~/.bashrc) 2.然后source ./bash ...

  3. 自动的自动化:EvoSuite 自动生成JUnit的测试用例

    EvoSuite简介 EvoSuite是由Sheffield等大学联合开发的一种开源工具,用于自动生成测试用例集,生成的测试用例均符合Junit的标准,可直接在Junit中运行.得到了Google和Y ...

  4. ASP.NET Core 入门教程 4、ASP.NET Core MVC控制器入门

    一.前言 1.本教程主要内容 ASP.NET Core MVC控制器简介 ASP.NET Core MVC控制器操作简介 ASP.NET Core MVC控制器操作简介返回类型简介 ASP.NET C ...

  5. UDK脚本函数性能工具

    数据采集 游戏中使用控制台命令来采集脚本函数性能数据 ProfileGame Start  // 开始捕获性能数据 ProfileGame Stop  // 停止捕获并保存数据文件,并保存到[Game ...

  6. C#List<object>排序

    //定义一个集合 var list = new List<Object>();//这里的Object为对象类型 //假设list已经有数据存进去,根据对象的某个字段升序或降序 var or ...

  7. access denied for user 'root'@'localhost'(using password:YES) FOR WINDOWS

    以windows为例: mysql5.5 1. 关闭正在运行的MySQL服务. 2. 打开DOS窗口,转到mysql\bin目录. 3. 输入mysqld --skip-grant-tables 回车 ...

  8. C#与SQL Server数据库连接

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...

  9. SQLServer之创建DML AFTER INSERT触发器

    DML AFTER INSERT触发器创建原理 触发器触发时,系统自动在内存中创建deleted表或inserted表,内存中创建的表只读,不允许修改,触发器执行完成后,自动删除. insert触发器 ...

  10. python基础篇实战

    1. 判断下面的结果 # 1. 判断下面的结果 # 1 > 1 or 3 < 4 or 4 > 5 and 2 > 1 and 9 > 8 or 7 < 6 pri ...