求逆元 HDU 2516】的更多相关文章

地址:http://acm.hdu.edu.cn/showproblem.php?pid=5768 Lucky7 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Problem Description When ?? was born, seven crows flew in and stopped beside him. In its childhood, ?? had be…
题意:给出n=A mod 9973和B,求(A/B) mod 9973 昨天用扩展欧几里得做过这题,其实用逆元也可以做. 逆元的定义:例如a*b≡1 (mod m),则b就是a关于m的逆元. 求逆元方法也很简单,用扩展欧几里得解这个方程即可. 逆元性质:若a是b的逆元,则(x/a)mod p=(x*b)mod p 对于本题呢?设B的逆元为x, 那么有(A/B) mod 9973=((A mod 9973)*(x mod 9973))mod 9973 Reference:  http://blog…
[题目链接]pid=5407">click here~~ [题目大意]求LCM(Cn0,Cn1,Cn2....Cnn)%MOD 的值 [思路]来图更直观: 这个究竟是怎样推出的.说实话.本人数学归纳大法没有推出来,幸得一个大神给定愿文具体证明.点击这里:click here~~ 代码: #include <bits/stdc++.h> using namespace std; const int N=1e6+10; const int MOD=1e9+7; typedef lo…
题意:给出 A%9973 和 B,求(A/B)%9973的值. 解法:拓展欧几里德求逆元.由于同余的性质只有在 * 和 + 的情况下一直成立,我们要把 /B 转化为 *B-1,也就是求逆元. 对于 B-1,P为模数9973,那么 B*B-1=1(mod P)  →  把 B-1 看成 x ,就是 Bx+Py=1.也就是求不定方程的解了.x 就是 B-1,答案就是 ((A%9973)*(x%9973))%9973 . P.S.关于拓展欧几里德求解不定方程的具体解释请见--[poj 2115]C L…
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1576 A/B Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 4020    Accepted Submission(s): 3091 Problem Description 要求(A/B)%9973,但由于A很大,我们只给出n(n=A%99…
Codeforces Round #258 (Div. 2) Devu and Flowers E. Devu and Flowers time limit per test 4 seconds memory limit per test 256 megabytes input standard input output standard output Devu wants to decorate his garden with flowers. He has purchased n boxes…
1.gcd int gcd(int a,int b){ return b?gcd(b,a%b):a; } 2.扩展gcd )extend great common divisor ll exgcd(ll l,ll r,ll &x,ll &y) { if(r==0){x=1;y=0;return l;} else { ll d=exgcd(r,l%r,y,x); y-=l/r*x; return d; } } 3.求a关于m的乘法逆元 ll mod_inverse(ll a,ll m){ l…
4522: [Cqoi2016]密钥破解 Time Limit: 10 Sec  Memory Limit: 512 MBSubmit: 290  Solved: 148[Submit][Status][Discuss] Description  一种非对称加密算法的密钥生成过程如下: 1.任选两个不同的质数p,q 2.计算N=pq,r=(p−1)(q−1) 3.选取小于r,且与r互质的整数e 4.计算整数d,使得ed≡1KQ/r 5.二元组(N,e)称为公钥,二元组(N,d)称为私钥 当需要加…
题意: 给出n次翻转和m张牌,牌相同且一开始背面向上,输入n个数xi,表示xi张牌翻转,问最后得到的牌的情况的总数. 思路: 首先我们可以假设一开始牌背面状态为0,正面则为1,最后即是求ΣC(m,k),k为所有能取到1的情况.首先我们要确认最后1的奇偶性.因为一次翻转0->1,或者1->0,则最后所有1的情况的奇偶性相同.然后我们要找到最小的1的个数i和最大的1的个数j,i为能翻1则翻1,j为能翻0则翻0,介于中间的情况是取偶数步数,一半翻1,一半翻0,保持1的个数不变.那么k为(i<=…
Modular Inverse Time Limit: 2 Seconds      Memory Limit: 65536 KB The modular modular multiplicative inverse of an integer a modulo m is an integer x such that a-1≡x (mod m). This is equivalent to ax≡1 (mod m). Input There are multiple test cases. Th…
题目链接:codeforces 492e vanya and field 留个扩展gcd求逆元的板子. 设i,j为每颗苹果树的位置,因为gcd(n,dx) = 1,gcd(n,dy) = 1,所以当走了n步后,x从0~n-1,y从0~n-1都访问过,但x,y不相同. 所以,x肯定要经过0点,所以我只需要求y点就可以了. i,j为每颗苹果树的位置,设在经过了a步后,i到达了0,j到达了M. 则有 1----------------------(i + b * dx) % n = 0 2------…
1258 序列求和 V4 题意:求\(S_m(n) = \sum_{i=1}^n i^m \mod 10^9+7\),多组数据,\(T \le 500, n \le 10^{18}, k \le 50000\) 等幂求和 多项式求逆元\(O(mlogm)\)预处理伯努利数,然后可以\(O(m)\)回答 因为是任意模数,所以要用拆系数fft 拆系数fft+多项式求逆元,写的爽死了 具体内容可能会写学习笔记 注意: 多项式求逆元里拆系数,不能只更新 .x= ,这样的话y还保留以前的值就错了 因为使用…
51nod 1118 机器人走方格: 思路:这是一道简单题,很容易就看出用动态规划扫一遍就可以得到结果, 时间复杂度O(m*n).运算量1000*1000 = 1000000,很明显不会超时. 递推式子:dp[i][j] = dp[i-1][j] + dp[i][j-1].  dp[i][j]表示当规格为i*j  (m = i && n = j)  时本题的结果. 直接上代码: #include <stdio.h> #include <string.h> #defi…
题意: 求出n个点的简单(无重边无自环)无向连通图数目.方案数mod 1004535809(479 * 2 ^ 21 + 1)即可. n<=130000 DP求方案 g(n) n个点所有图的方案数 显然2C(n,2)=2n(n-1) f(n) n个点连通图的方案数 然后枚举第一个点所在连通块的点数 g(n)=∑i=1..n-1{C(n-1,i-1)*f(i)*g(n-i)} 代入g(n) 两边同除(n-1)!消掉那个组合数上面那块,就变成了卷积的形式 我不写了直接看Miskcoo的公式啦 htt…
礼物 题意: 求\[C(n,m)\ \%\ p\] \(n,m,p\le 10^9\),且若\(p=\prod_{i=1}^{k}{p_i}^{c_i}\),则\(\forall i\in [1..k]{p_i}^{c_i}\le 10^5.\) 注意到若\[p=\prod_{i=1}^{k}{p_i}^{c_i},则\forall i\in [1..k]{p_i}^{c_i}\le 10^5.\] 于是有一个经典套路就是,求出\(k\)组\(A_i=C(n,m)\% {p_i}^{c_i}\)…
这绿题贼水...... 原理我不讲了,随便拿张草稿纸推一下就明白了. #include <cstdio> using namespace std; ; int su[N],ans,top; bool vis[N]; void shai(int b) { ;i<=b;i++) { if(!vis[i]) { su[top++]=i; } ;j<top && i*su[j]<=b;j++) { vis[su[j]*i]=; ) break; } } return;…
在O(n)的时间内求组合数.求逆元.求阶乘.·.· #include <iostream> #include <cstdio> #define ll long long ;//1e5越界 ; using namespace std; ll fac[N]={,},inv[N]={,},fi[N]={,};//fac[i]是i的阶乘,inv[i]是i的逆元,fi[i]是i之前的很多逆元求得阶乘,(将除i取模变为乘i的逆元取模 void init() { ;i<N;i++) { f…
题目来源 The 2018 ACM-ICPC China JiangSu Provincial Programming Contest 35.4% 1000ms 65536K Persona5 Persona5 is a famous video game. In the game, you are going to build relationship with your friends. You have N friends and each friends have his upper b…
gcd(欧几里得算法辗转相除法): gcd ( a , b )= d : 即 d = gcd ( a , b ) = gcd ( b , a mod b ):以此式进行递归即可. 之前一直愚蠢地以为辗转相除法输进去时 a 要大于 b ,现在发现事实上如果 a 小于 b,那第一次就会先交换 a 与 b. #include<stdio.h> #define ll long long ll gcd(ll a,ll b){ ?a:gcd(b,a%b); } int main(){ ll a,b; wh…
概述 多项式求逆元是一个非常重要的知识点,许多多项式操作都需要用到该算法,包括多项式取模,除法,开跟,求ln,求exp,快速幂.用快速傅里叶变换和倍增法可以在$O(n log n)$的时间复杂度下求出一个$n$次多项式的逆元. 前置技能 快速数论变换(NTT),求一个数$x$在模$p$意义下的乘法逆元. 多项式的逆元 给定一个多项式$A(x)$,其次数为$deg_A$,若存在一个多项式$B(x)$,使其满足$deg_B≤deg_A$,且$A(x)\times B(x) \equiv 1 (mod…
HDU.2516 取石子游戏 (博弈论 斐波那契博弈) 题意分析 简单的斐波那契博弈 博弈论快速入门 代码总览 #include <bits/stdc++.h> #define nmax 51 using namespace std; int main() { int fib[nmax]; fib[1] = fib[2] = 1; for(int i = 3;i<nmax;++i){ fib[i] = fib[i-1] + fib[i-2]; } int n; while(scanf(&…
题意:给你n个珠子可以染成k种颜色,旋转后相同的视为一种,问共有几种情况 思路:开始按照一般的排列组合做发现情况太多且要太多运算,查了下发现此题是组合中Polya定理模板题- 学的浅只能大致一说公式Sigma(k^gcd(i-1,n))/n求和数量取决于置换群数量,由于这个成环共有n个置换群,而GCD是求当前置换群的等价置换的数量. 注意由于最后要除n,如果直接取模会出现问题.通过费马小定理求得乘法逆元为pow(n,p-2)%p; 其中p为质数. #include <stdio.h> #inc…
到国庆假期都是复习阶段..所以把一些东西整理重温一下. gcd(a,p)=1,ax≡1(%p),则x为a的逆元.注意前提:gcd(a,p)=1; 方法一:拓展欧几里得 gcd(a,p)=1,ax≡1(%p),转化为ax+py≡1,拓展欧几里得可解决ax+by=gcd(a,b) void exgcd(int a,int b,int &x,int &y) { ) { x=,y=; return a; } int g=exgcd(b,a%b,x,y); int t=x;x=y;y=t-(a/b)…
2186: [Sdoi2008]沙拉公主的困惑 Description 大富翁国因为通货膨胀,以及假钞泛滥,政府决定推出一项新的政策:现有钞票编号范围为1到N的阶乘,但是,政府只发行编号与M!互质的钞票.房地产第一大户沙拉公主决定预测一下大富翁国现在所有真钞票的数量.现在,请你帮助沙拉公主解决这个问题,由于可能张数非常大,你只需计算出对R取模后的答案即可.R是一个质数. Input 第一行为两个整数T,R.R<=10^9+10,T<=10000,表示该组中测试数据数目,R为模后面T行,每行一对…
扩展欧几里得求逆元 实话说这个算法如果手推的话问题不大,无非就是辗转相除法的逆过程,还有一种就是利用扩展欧几里德算法,学信安数学基础的时候问题不大,但现在几乎都忘了,刷题的时候也是用kuangbin博主全国通用的模板,代码十分简洁,但并没有理解其原理,学的时候也只了解了个大概. 来看代码吧: #include<bits/stdc++.h> using namespace std; int E_GCD(int a,int b,int &x,int &y) { if(!a&…
题意:给出一个字符串,每次询问给出x和y要求算出从x到y的每个字符的(ASCII 码值-28)的值的积(mod9973). 分析:首先的想法肯定是算出每个位置的前缀积,然后只要F[y]/F[x-1]即可.但是每个前缀积都已经mod9973了,就不能直接这样得出结果了,所以利用求逆元.因为a/b(mod p)p是质数的话,相当于a*inv(b) (mod p),所以只要保存每个位置的前缀积和前缀积的逆元就可以了. 但是题目有个坑点,如果x和y超出了这次字符串的位置,可以使用上一次数据储存的值而不是…
题目链接:https://loj.ac/problem/6392 题目大意:给定五个正整数c1,c2,e1,e2,N,其中e1与e2互质,且满足 c1 = m^e1 mod N c2 = m^e2 mod N 求出正整数m 解题思路:因为e1与e2互质,所以可以找到两个整数x,y,满足e1x+e2y=1 所以m^(e1x+e2y)=m^1=m=c1^x*c2^y; 注意如果x或者y小于0时,需要求c1.c2对N的逆元 因为N的范围很大,小于2的63次方,所以不能直接乘,需要用快速乘. 求逆元的时…
当模数为素数时可以用费马小定理求逆元. 模数为合数时,费马小定理大部分情况下失效,此时,只有与模数互质的数才有逆元(满足费马小定理的合数叫伪素数,讨论这个问题就需要新开一个博客了). (对于一个数n,所有小于它且与它互质的数组成一个模n乘法群) gcd是最大公约数,扩展gcd则是在一对数x,y的gcd后,给出一组解a,b,使得 a*x+b*y=gcd(x,y) 不难看出,如果将y是模数,并且x与y的gcd为1时 a*x+b*y=1 a*x % y=1 根据逆元的定义,此时a就是x的模y逆元. i…
题目链接:http://www.lightoj.com/volume_showproblem.php?problem=1067 1067 - Combinations Given n different objects, you want to take k of them. How many ways to can do it? For example, say there are 4 items; you want to take 2 of them. So, you can do it 6…
题目传送门 逆元定义 逆元和我们平时所说的倒数是有一定的区别的,我们平时所说的倒数是指:a*(1/a) = 1,那么逆元和倒数之间的区别就是:假设x是a的逆元,那么 a * x = 1(mod p),也就是只多了一个取余的操作,这个取余的操作,就会保证a的逆元不一定只是a的倒数.那么我们的逆元有什么作用呢? 并且取余还不满足下面式子:( a/b )%p = (a%p  /  b%p)  %  p ,那么我们如果遇到b过大必须在中间过程进行取余的操作,那么我们会发现在乘法中满足:(a*b) % p…