数论练习1 ( 曹冲养猪 + [POJ 2891]Strange Way to Express Integers + 乘法逆元【带证明】)

虽然作业还没有做完,但是我还是放不下它,对此,我只想说:
今天你对作业爱理不理,明天它就让你补到飞起
在这里插入图片描述

DP先放放,我们要雨露均沾

  • 练习上手:乘法逆元
    • 题目
    • 题解
    • 代码实现
  • 曹冲养猪?(互质的中国剩余定理)
    • 题目
    • 题解
    • 代码实现
  • Strange Way to Express Integers(不互质的中国剩余定理)
    • 题目
    • 题解
    • 代码实现

练习上手:乘法逆元

题目

在这里插入图片描述
在这里插入图片描述

题解

对于这种求[1,n]区间的乘法逆元,
费马小定理?
在这里插入图片描述
扩展欧几里得?
在这里插入图片描述
这两种对于求单个是比较有用的,O(nlogn)
但是对于这种区间求解就需要O(n)的线性筛了

for ( int i = 2;i <= n;i ++ )inv[i] = inv[p % i] * ( p - p / i ) % p;

至于为什么是这样子的,我们来进行简单推理:
首先应该要了解
对于数字A,B存在A∗X≡1(modBA*X≡1(mod BAX1modB),则称X为A对B的逆元。
一般这个乘法逆元是运用在需要取模而过程中又涉及到除法运算的时候,
将其转化为乘法计算

进入证明?:

T=p/i,K=pT=p/i,K=pT=p/i,K=p%iii
则有K+T∗i=pK+T*i=pK+Ti=p,被除数等于商乘除数加余数
K+T∗i≡0(modK+T*i≡0 (modK+Ti0(mod p)p)p)
变形:K≡−T∗i(modK≡-T*i(modKTi(mod p)p)p)
两边同时除以i∗Ki*KiK
–>1/i≡−T/K(mod1/i≡-T/K(mod1/iT/K(mod p)p)p)
1/i1/i1/i就是i的逆元,
因为这两个相乘取模p同余1,同时:除以K就相当于乘以K的逆元
接下来,将T=p/i,K=pT=p/i,K=pT=p/i,K=p%iii带入进去?
inv[i]=−p/i∗inv[pinv[i]=-p/i*inv[pinv[i]=p/iinv[p%i]i]i](mod p)p)p)
为了防止出现负数,就加一个p∗inv[pp * inv[ppinv[p%i]i]i],利用取模的运算律
inv[i]=inv[pinv[i] = inv[pinv[i]=inv[p%i]∗(p−p/i)i] * ( p - p / i )i](pp/i)%ppp

在这里插入图片描述

代码实现

#include <cstdio>
#define LL long long
#define MAXN 3000005
int n, p;
LL inv[MAXN];
int main() {scanf ( "%d %d", &n, &p );inv[1] = 1;printf ( "1\n" );for ( int i = 2;i <= n;i ++ ) {inv[i] = inv[p % i] * ( p - p / i ) % p;printf ( "%lld\n", inv[i] );}return 0;
}

ok,让我们随着难度的增加慢慢深入,就先去养养?,体验农村生活
在这里插入图片描述

曹冲养猪?(互质的中国剩余定理)

题目

在这里插入图片描述
在这里插入图片描述

题解

这道题,还好还好,麻痹自己,模板也是可以自己,慢慢看懂的,我就不多证明了,
主要是我懒得打了。。。

取模定理:两数不能整除,若被除数扩大(或缩小)了几倍,而除数不变,则其商和余数也同时扩大(或缩小)相同的倍数(余数必小于除数)。
如果a%b=c,那么如果x%b=c * 2,此时有x=a * 2;
转化为求通解问题,即:
求解同余方程组
x≡ a1​(mod m1​)
x≡ a2​(mod m2​)
x≡ a3​(mod m3​)

x≡ ak​(mod mk​)​
其中m1,m2,m3…mk为两两互质的整数求x的最小非负整数解
在这里插入图片描述
M是输入的所有m[i]的乘积,Ti是M/mi的逆元
在这里插入图片描述
在这里插入图片描述
接下来就是模板套上去就可以了,在这里我只想补充,int128是个好玩意儿啊!!
在这里插入图片描述

代码实现

#include <cstdio>
#define MAXN 15
#define LL __int128
int n;
int m[MAXN], r[MAXN];void print ( LL x ) {if ( x > 9 )print ( x / 10 );putchar ( ( x % 10 ) + '0' );
}void exgcd ( LL a, LL b, int &x, int &y ) {if ( ! b ) {x = 1;y = 0;return;}exgcd ( b, a % b, y, x );y -= ( a / b ) * x;
} int main() {scanf ( "%d", &n );for ( int i = 1;i <= n;i ++ )scanf ( "%d %d", &m[i], &r[i] );LL lcm = 1, ans = 0;int x, y;for ( int i = 1;i <= n;i ++ )lcm = lcm * m[i];for ( int i = 1;i <= n;i ++ ) {LL tp = lcm / m[i];exgcd ( tp, m[i], x, y );x = ( x % m[i] + m[i] ) % m[i];ans = ( ans % lcm + tp * r[i] % lcm * x % lcm ) % lcm;}LL res = ( ans % lcm + lcm ) % lcm;print ( res );return 0;
} 

Strange Way to Express Integers(不互质的中国剩余定理)

题目

在这里插入图片描述
在这里插入图片描述

题解

那么,当模数不两两互质
即求:
解同余方程组
x≡ a1​(mod m1​)
x≡ a2​(mod m2​)
x≡ a3​(mod m3​)…
x≡ ak​(mod mk​)​
其中m1,m2,m3…mk是不一定两两互质的整数求x的最小非负整数解
我们先考虑:只有两个数该怎么处理
可以得到:
x=a1+k1∗m1x=a1+k1*m1x=a1+k1m1
x=a2+k2∗m2x=a2+k2*m2x=a2+k2m2
k2∗m2−k1∗m1=a1−a2k2*m2-k1*m1=a1-a2k2m2k1m1=a1a2
四不四很像 ax+by=cax+by=cax+by=c
设m1,m2的gcd为g,a1−a2=ca1-a2=ca1a2=c
1)当c不是g的倍数时,exgcd无解
2)如果是,
在这里插入图片描述
则用exgcd求出k2∗m2+(−k1)∗m1=gcd(m1,m2)k2*m2+(-k1)*m1=gcd(m1,m2)k2m2+(k1)m1=gcd(m1,m2)
因为c是g的倍数,两边同时乘以一个c/g,即k1乘上c/g得到
k2∗m2+(−k1)∗m1=c解为−k1k2*m2+(-k1)*m1=c解为-k1k2m2+(k1)m1=ck1

X=a1−k1∗m1X=a1-k1*m1X=a1k1m1
这样就求出了x。
我们设这个x为x0
所以,可以得到的通解为x=x0+k∗lcm(m1,m2)x=x0+k*lcm(m1,m2)x=x0+klcm(m1,m2)

将这个方程转化一下,可以得到一个新的同余方程
x=x0(modx=x0(modx=x0(mod lcm(m1,m2))lcm(m1,m2))lcm(m1,m2))

我们便成功的将两个方程转化为了一个方程
后面以此类推,得到最后一个x0,即为我们所需要的答案。

上模板讲解?
M是上一次的最小公倍数lcm
R是上一次的x0,及我们的当前答案

R = a[1], M = m[1];
FOR(1~N)
gcd = exgcd ( M, m[i], x, y );
//k2*m2+(-k1)*m1=gcd(m1,m2),这里M就是m1,m[i]就是m2,x,y是对应的k系数
c = R - a[i];
x = c / gcd * x % m[i];
//x此时就是k2*m2+(-k1)*m1=c中的-k1
R -= x * M;
//更新新的X答案m,X=a1-k1*m1(如果是➖,参照这个方程),
//x=x0+k*lcm(m1,m2)(如果是➕,参照这个方程)
M = M / gcd * m[i];
//更新新的lcm
R %= M;

在这里插入图片描述

代码实现

#include <cstdio>
#define MAXN 100005
#define LL long long
int n;
int m[MAXN], a[MAXN];LL exgcd ( LL a, LL b, LL &x, LL &y ) {if ( ! b ) {x = 1;y = 0;return a;}LL d = exgcd ( b, a % b, y, x );y -= ( a / b ) * x;return d;
} LL gcd, R, M, x, y, c;int main() {while ( scanf ( "%d", &n ) != EOF ) {bool flag = 0;for ( int i = 1;i <= n;i ++ )scanf ( "%d %d", &m[i], &a[i] );R = a[1], M = m[1];for ( int i = 2;i <= n;i ++ ) {gcd = exgcd ( M, m[i], x, y );c = R - a[i];if ( c % gcd ) {flag = 1;printf ( "-1\n" );break;}x = c / gcd * x % ( m[i] / gcd );R -= x * M;M = M / gcd * m[i];R %= M;}if ( ! flag )printf ( "%lld\n", ( R % M + M ) % M );} return 0;
} 

好了,我已经被榨干了,去做其他的DP和数论了,ヾ( ̄▽ ̄)ByeBye
在这里插入图片描述在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/318276.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

总结:8.9 模拟(枚举搜索)

文章目录前言考场流程T1 fansT2 huarongT3 meetT4 truth复盘T1 fansT2 huarongT3 meetT4 truth总结前言 25分… 主要的原因&#xff1a; 几乎到了考试结束才看到本次是搜索模拟&#xff01;直接当全盲的模拟做的&#xff0c;T1和T4受到极大影响贪了。几乎已经是老生常谈&…

【做题记录】[NOI2008] 假面舞会—有向图上的环与最长链

luogu 1477 [NOI2008] 假面舞会 容易发现&#xff1a; 如果图中没有环&#xff0c;那么面具种数一定是所有联通块内最长链之和&#xff0c;最少为 \(3\) 。 如果有环&#xff0c;则面具种数一定是所有环的大小的最大公约数。 那么只要求出每一个联通块内的最长链与环即可。 由…

开发.NET Core NuGet包并实现CI/CD

实际开发中我们需要对一些公共类库进行开发&#xff0c;并基于Jenkins进行CI/CD&#xff08;CI:持续集成&#xff0c;CD:持续部署&#xff09;,其他项目通过NuGet引用。上文讲述了如何搭建本地NuGet服务器并发布NuGet包&#xff0c;这里不再赘述。CI/CD流程如下图&#xff1a;首…

acwing221 龙哥的问题

acwing221 龙哥的问题 文章目录题目&#xff1a;题解&#xff1a;代码&#xff1a;题目&#xff1a; 题解&#xff1a; 代码&#xff1a; #include <bits/stdc.h> using namespace std; typedef long long ll;int phi(int x) {int ansx;for(int i2;(ll)i*i<x;i)if(x%…

AT2363-[AGC012C]Tautonym Puzzle【构造】

正题 题目链接:https://www.luogu.com.cn/problem/AT2363 题目大意 给出nnn&#xff0c;要求构造一个字符串sss&#xff0c;使得能够找出恰好nnn个子序列使得这个子序列能划分成前后相等的两份。 要求∣s∣≤200|s|\leq 200∣s∣≤200&#xff0c;字符集为[1,100][1,100][1,1…

8.10模拟:贪心、最优化思路

文章目录前言最大的收获&#xff1a;考场流程T1 alignmentT2 flowerT3 reformatT4 inverse复盘T2 flowerT3 reformatT4 inverse总结前言 305分 今天考得还算不错&#xff01;awa &#xff08;冷静&#xff0c;明天数据结构还是要先写暴力&#xff09; 因为数据结构的题就是为了…

DP专练3:征途

虽然只有1道题&#xff0c;但是含金量还是够够di 文章目录题目题解代码实现题目 题解 我们直接对答案输出格式进行处理&#xff1a;设第 iii 天走的路程为 aia_iai​&#xff0c;总路程为 S∑i1nleniS\sum_{i1}^nlen_iS∑i1n​leni​&#xff0c;那么 v∑i1m(ai−Sm)2mv∑_{i1…

云时代的.NET

编程语言从最初的0101机器码到汇编语言再到面向对象的编程&#xff0c;不断的发展&#xff0c;整个发展趋势呈现高内聚、低耦合、可重用、可理解的特点。最早编程是用机器码&#xff0c;人的大脑不像电脑&#xff0c;无法处理0101&#xff1b;后来汇编语言还是太费解&#xff0…

P6295-有标号 DAG 计数【多项式求逆,多项式ln】

正题 题目链接:https://www.luogu.com.cn/problem/P6295 题目大意 求所有nnn个点的弱联通DAGDAGDAG数量。 1≤n≤1051\leq n\leq 10^51≤n≤105 解题思路 先不考虑弱联通的限制&#xff0c;求nnn个点的DAGDAGDAG数量。 设为fif_ifi​&#xff0c;那么有式子 fn∑i1n(ni)2i(…

研究性学习:APP的隐私问题

文章目录写在前面背景&#xff08;problem&#xff09;一个实例(example)手机App用户输入隐私数据的识别与检测技术研究&#xff08;solution&#xff1f;&#xff09;&#xff08;官方&#xff09;概览背景介绍4.系统设计隐私政策引言1.收集信息2. 信息使用3. 信息披露4. 信息…

DP专练4:[SCOI 2010]股票交易(单调队列优化dp)

昨天晚上&#xff0c;初见它时&#xff0c;月黑风高&#xff0c;一个电脑&#xff0c;一支笔&#xff0c;一个人 今天秋高气爽&#xff0c;再一瞥&#xff0c;回眸间 我又来了&#xff0c;honey题目题解代码实现题目 题解 首先这种 iii 天与前面 jjj 天有关联&#xff0c;而…

【做题记录】[NOIP2016 普及组] 魔法阵

P2119 魔法阵 2016年普及组T4 题意&#xff1a; 给定一系列元素 \(\{X_i\}\) &#xff0c;求满足以下不等式的每一个元素作为 \(a,b,c,d\) 的出现次数 。 \[\begin{cases}X_a<X_b<X_c<X_d \\ X_a-X_b2\times (X_d-X_c) \\X_b-X_a<\dfrac{X_c-X_b}{3}\end{cases} \]…

P3812 【模板】线性基

P3812 【模板】线性基 题目描述 给定n个整数&#xff08;数字可能重复&#xff09;&#xff0c;求在这些数中选取任意个&#xff0c;使得他们的异或和最大 题解&#xff1a; 把所有数insert进入线性基&#xff0c;把线性基中所有元素xor起来 ans 代码&#xff1a; #incl…

“被狗啃”的按钮引发的开源社区信任危机

昨天&#xff0c;在国外民众还在欢度圣诞期间&#xff0c;开发者社区却对 Antd 开发团队发起了连番的炮轰。一觉醒来&#xff0c;他们发现由自己参与设计的、公司内网、办事系统等网页上&#xff0c;有一些按钮的上面多了一团白色的“积雪”&#xff0c;在白背景下&#xff0c;…

牛客练习赛89E-牛牛小数点【数论】

正题 题目链接:https://ac.nowcoder.com/acm/contest/11179/E 题目大意 定义f(x)f(x)f(x)表示1x\frac{1}{x}x1​的混循环节长度&#xff08;如果没有循环节就是000&#xff09;&#xff0c;TTT组询问给出l,rl,rl,r求 ∑ilrf(i)\sum_{il}^rf(i)il∑r​f(i) 1≤T≤100,1≤l≤r≤…

8.11模拟:数据结构

文章目录前言考场复盘T1 forwardT2 basketT4 square总结前言 320分 还不错啦 没有挂分还是很可贵的 &#xff08;暴力TLE就不怪我了&#xff09; T4反过来想其实就很可做了 逆向的思想需要培养&#xff08;今天T1、昨天T2也是&#xff09; 说实话今天早上状态不太好 特困生 不…

[COCI2017-2018#5] Pictionary(并查集+dfs)

贼ex的一道&#xff0c;卡了本仙女整整7个小时orz 思路容易理解&#xff0c;but码力very重要orz 我愿意花五毛钱提升我的码力&#xff0c;换个脑子也行&#xff0c;不换脸这张脸生得俊俏 luogu传送door 题目 在宇宙一个不为人知的地方&#xff0c;有一个星球&#xff0c;上面…

P4570 [BJWC2011]元素

题目描述&#xff1a; 每个矿石有序号和魔力值&#xff0c;每个矿石最多使用一次&#xff0c;且多个矿石序号不能异或为0的前提下&#xff0c;问最多可以得到多少魔力值 题解&#xff1a; 异或运算的最终结果只和用于运算的数的各位上1的数量有关&#xff0c;与各数字运算的…

Docker最全教程——从理论到实战(九)

在本系列教程中&#xff0c;笔者希望将必要的知识点围绕理论、流程&#xff08;工作流程&#xff09;、方法、实践来进行讲解&#xff0c;而不是单纯的为讲解知识点而进行讲解。也就是说&#xff0c;笔者希望能够让大家将理论、知识、思想和指导应用到工作的实际场景和实践之中…

【做题记录】CF1444A Division

CF1444A Division 题意&#xff1a; 给定 \(t\) 组询问&#xff0c;每组给两个数 \(p_i\) 和 \(q_i\) &#xff0c;找出最大的整数 \(x_i\) &#xff0c;要求 \(p_i\) 可被 \(x_i\) 整除&#xff0c;且 \(x_i\) 不可被 \(q_i\) 整除 。 题解&#xff1a; 呜呜呜这道题总共算下来…