[题解]luogu_P2613有理数取余】的更多相关文章

#include<bits/stdc++.h> #define ll long long using namespace std; ; inline int read(){ ,fix=;char ch; :fix; do{ res=(res<<)+(res<<)+(ch^); res%=mod; } while(isdigit(ch=getchar())); return res*fix; } ll a,b,x,y; int exgcd(ll a,ll b,ll &am…
P2613 [模板]有理数取余 题目描述 给出一个有理数c=\frac{a}{b}c=ba​,求c\ \bmod 19260817c mod19260817的值. 输入输出格式 输入格式: 一共两行. 第一行,一个整数aa.第二行,一个整数bb. 输出格式: 一个整数,代表求余后的结果.如果无解,输出Angry! 输入输出样例 输入样例#1: 复制 233 666 输出样例#1: 复制 18595654 说明 对于所有数据,0\leq a,b \leq 10^{10001}0≤a,b≤10100…
P2613 [模板]有理数取余 读入优化预处理 $\frac {a}{b}\mod 19620817$ 也就是$a\times b^{-1}$ $a\times b^{-1}\mod 19620817=a\times b^{19620815}\mod 19620817$ 除法转化为了乘法,同余的性质... 求一个逆元即可,根据费马小定理,由于$19620817$是一个质数 #include<bits/stdc++.h> #define LL long long using namespace…
题目 P2613 [模板]有理数取余 解析 简单的数论题 发现并没有对小数取余这一说,所以我们把原式化一下, \[(c=\frac{a}{b})\equiv a\times b^{-1}(mod\ p)\] 因为\(p\)是质数,所以我们根据费马小定理\(b^{p-1}\equiv 1(mod p)\), 有\(a\times b^{-1}\times 1 \equiv c(mod\ p)\), \(=>a\times b^{-1}\times b^{p-1} \equiv c(mod\ p)\…
题目链接 我们先看这个式子: $c=\dfrac{a}{b}$ $ $ $ $ $mod$ $ $ $ $ $19260817$ 某正常高中生:这$……$ --- 对于这个 $c$ . 显然,它很可能是小数. 那么, $double$ 的取余你老师讲过么$?!!!$ 所以,我们要~~化简~~魔改一下这个式子. --- $$c=\dfrac{a}{b}=a*b^{-1}$$ 又因为是 $mod$ $ $ $p=19260817$ 的意义下的计算. 所以,现在就有了一种化小数为整数的方法:  乘法逆…
原题链接 https://www.luogu.org/problemnew/show/P2613 在这里虽然是讲洛谷的题解,但用到的数论知识,归并到数论里也不为过! 进入正题: 首先看到题面:给出一个有理数c=a/b,求c mod 19260817的值. 看一下数据范围 我滴天!!!又要写高精???GG无疑!!! 咦,既然要取余,还做乘法运算,那只要写个快读在读入时取膜不就好啦,这样就爆不了long long 了. 有理数求余???搞笑呢,不是只有整数求余嘛? 我们知道有理数包含整数和分数,那么…
题面 题目描述 给出一个有理数 c=\frac{a}{b}  ​ ,求  c mod19260817  的值. 输入输出格式 输入格式: 一共两行. 第一行,一个整数 \( a \) .第二行,一个整数 \( b \) . 输出格式: 一个整数,代表求余后的结果.如果无解,输出Angry! 说明 对于所有数据,\(  0\leq a,b \leq 10^{10001},0≤a,b≤1010001 \) 很平常的一道膜板题,求解除法取模需要利用乘法逆元的知识 直接扩展欧几里得算法求解逆元 至于数据…
题目描述 给出一个有理数 $c=\frac{a}{b}$ ,求 c mod 19260817 的值. 输入输出格式 输入格式: 一共两行. 第一行,一个整数 aa .第二行,一个整数 bb . 输出格式: 一个整数,代表求余后的结果.如果无解,输出Angry! 输入输出样例 输入样例#1: 233 666 输出样例#1: 18595654 说明 对于所有数据, 0≤a,b≤1010001 Solution: 本题太板子,不多讲. 读入时处理一下$a,b$,先取模一下,然后直接扩欧或者费马小定理搞…
题目描述 给出一个有理数 c=a/b ,求 c mod 19260817的值. 说明 对于所有数据, 0≤a,b≤10^10001 分析: 一看题 这么短 哇简单!况且19260817还是个素数!(美滋滋 再一看数据 我天 可怕 10^10001 一看 完了 要打高精 (但我打高精肯定GG啊 一想 根据同余好像可做(前面的大佬讲过了我就不赘述了 哦 对了 还有费马小定理: a^phi(p)≡1(mod p) (只对于p是质数的情况哦 然后对于快读 略做修改就可以了 ---------------…
题目大意:给你$a,b(a,b\leqslant10^{10001})$,求出$\dfrac a b\equiv1\pmod{19260817}$,无解输出 Angry! 题解:在读入的时候取模,若$b=0$输出无解,否则正常的求逆就行了 卡点:无 C++ Code: #include <cstdio> #include <cctype> const long long mod = 19260817; long long a, b; inline long long read()…
题目链接 \(Click\) \(Here\) 真心没啥东西,只要能\(Get\)到在数字输入的时候按位取模,以及除数也可以直接取模就可以了.(把每个数看做乘法原理和加法原理构造起来的即可.) #include <bits/stdc++.h> using namespace std; const int Mod = 19260817; int read_Mod () { int s = 0, ch = getchar (); while ('9' < ch || ch < '0')…
题目 \(c\)等于一个分数,求他的余数,分数是不能直接模的,除以一个数等于乘上这个数的逆元. 所以此题就是求一个逆元,费马小定理求逆元是很方便的,一个快速幂就解决了. 还要注意因为\(a,b\)的值都很大,在读入的时候需要取模 但是这样只能拿到\(90\)分,最后一个点过不了,什么原因?我们还没有判断这个\(b\)是否有逆元,判断这个数是否有逆元的方法,也不难,只需判断\(gcd(b, mod)\)是否为\(1\)即可. 话说我自己写过博客的我都忘了,做题的时候回来看的\(233\) 貌似博客…
刷水题. 传送门 看似高精而非高精乃是此题最大亮点. 边读边取模技能get~ #include<cstdio> #define ll long long #define mod 19260817 ll read() { ll ret=;char c=getchar(); ')c=getchar(); *ret+c-')%mod,c=getchar(); return ret; } ll ksm(ll b,int p) { ll ret=; while(p) { )ret=(ret*b)%mod…
传送门 #include <iostream> #include <cstdio> #include <cstring> #include <algorithm> #include <cmath> #define re register using namespace std; const int mod = 19260817; inline long long read() { char ch = getchar(); long long f…
题目链接 分析:打表以后就能发现时卡特兰数, 但是有除法取余. f[i] = f[i-1]*(4*i - 2)/(i+1); 看了一下网上的题解,照着题解写了下面的代码,不过还是不明白,为什么用扩展gcd, 不是用逆元吗.. 网上还有别人的解释,没看懂,贴一下: (a / b) % m = ( a % (m*b)) / b 笔者注:鉴于ACM题目特别喜欢M=1000000007,为质数: 当gcd(b,m) = 1, 有性质: (a/b)%m = (a*b^-1)%m, 其中b^-1是b模m的逆…
题目描述 话说员工们整理好了筷子之后,就准备将快餐送出了,但是一看订单,都傻眼了:订单上没有留电话号码,只写了一个sramoc(k,m)函数,这什么东西?什么意思?于是餐厅找来了资深顾问团的成员,YQ,SC,HQ,经过大量的查阅,大家获得了一些信息,Sramoc ( K , M ) 表示用数字0.1.2-.K-1组成的自然数中能被M整除的最小数.例如 K=2,M=7的时候,Sramoc( 2 , 7 ) = 1001.自然电话号码就是1001,为了尽快将快餐送出,电脑组的童鞋们埋头算起了这个齐葩…
Rightmost Digit Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 69614    Accepted Submission(s): 25945 Problem Description Given a positive integer N, you should output the most right digit of N…
D. Game with modulo 题目链接:https://codeforces.com/contest/1104/problem/D 题意: 这题是一个交互题,首先一开始会有一个数a,你最终的目的是要将它猜出来. 每次询问会输出"? x y",然后有: "x" (without quotes), if (x % a)≥(y % a). "y" (without quotes), if (x % a)<(y % a). 最多给你60次…
Mr.BG is very busy person. So you have been given enough time (1000 milliseconds) to help him. Mr. BG has a bag of marbles with different alphabets written on them. And he has become busy on playing with these marbles by putting them in N boxes place…
取余是针对整形的,但是有时候一些特殊需求,我们需要 float 型对整形取下余数.比如,将角度化到 0- 360 范围内. 今天看到 lua 的实现方式: a % b == a - math.floor(a/b)*b 其它语言的也类似,关键就在使用 floor() 函数进行向下取整. 关于 floor(),示例如下: floor(3.14) = 3.0 floor(9.999999) = 9.0 floor(-3.14) = -4.0 floor(-9.999999) = -10   b 取整数…
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-…
工作中遇到一个简单的小问题,判断两个数是否整除,如果不整除,获取相关的余数. 习惯java的我毫不犹豫的写下了代码 public Boolean isDivisibility(Integer dividend,Integer divider) { return dividend % divider == 0; } 提交代码发现竟然提交不上?? 后来查看API发现apex中没有直接的%取余运算,所以如果想要取余以及判断是否整除需要其他方式,代码如下: public without sharing…
一般我们进行取余运算第一个想到的就是用百分号%,但当除数是个很大的数值,超出了int范围时,这样取余就不准确了. php大数(浮点数)取余函数 /** * php大数取余 * * @param int or float $bn 除数 * @param int $sn 被除数 * @return int 余数 */ //大数(浮点数)取余方法 function Kmod($bn, $sn) { return intval(fmod(floatval($bn), $sn)); } 测试代码: //大…
在java中%的含义为取余. java :a%b 数学公式a%b=a-(a/b)*b…
http://lightoj.com/volume_showproblem.php?problem=1214 这就是一道简单的大数取余. 还想还用到了同余定理: 所谓的同余,顾名思义,就是许多的数被一个数d去除,有相同的余数.d数学上的称谓为模.如a=6,b=1,d=5,则我们说a和b是模d同余的.因为他们都有相同的余数1. //// 数学上的记法为: a≡ b(mod d) 可以看出当n<d的时候,所有的n都对d同商,比如时钟上的小时数,都小于12,所以小时数都是模12的同商. 对于同余有三种…
题目链接 题意:K是由两个素数乘积,如果最小的素数小于L,输出BAD最小的素数,否则输出GOOD 分析 素数打表将 L 大点的素数打出来,一定要比L大,然后就开始枚举,只需K对 素数 取余 看看是否为零,但是 k 是一个很大的数,怎么存储又是一个问题,很好的一个解决方案:用千进制来表示 :加入是 1234567890 表示成 [890][567][234][1]这样存储,如果是十进制对 k 取余,那么就是 从最高位开始 加上 上步*10再取余,放在这里就是*1000 #include <iost…
#include <iostream> #include <algorithm> #include <cstring> #include <cstdlib> #include <cstdio> #include <string> using namespace std; ; //idea : s[0]做符号位, s[0]=0(0),1(>0),-1(<0) struct BigNum { int len; //长度 cha…
Snowflake Snow Snowflakes Time Limit: 4000MS   Memory Limit: 65536K Total Submissions: 30529   Accepted: 8033 Description You may have heard that no two snowflakes are alike. Your task is to write a program to determine whether this is really true. Y…
http://www.phpddt.com/php/php-take-over.html       fmod()与 % 区别   都是取余 fmod是函数 原型float fmod(float x, float y);%是运算符,只能用于整型…
题目就是指定n,求卡特兰数Ca(n)%m.求卡特兰数有递推公式.通项公式和近似公式三种,因为要取余,所以近似公式直接无法使用,递推公式我简单试了一下,TLE.所以只能从通项公式入手. Ca(n) = (2*n)! / n! / (n+1)! 思想就是把Ca(n)质因数分解,然后用快速幂取余算最后的答案.不过,算n!时如果从1到n依次质因数分解,肯定是要超时的,好在阶乘取余有规律,不断除素因子即可. 最后还是擦边过,可能筛法写得一般吧,也算是题目要求太柯刻. /* * Author : ben *…