石家庄物流网站建设长子网站建设
石家庄物流网站建设,长子网站建设,如何做网站使用手册,wordpress输出虽然作业还没有做完#xff0c;但是我还是放不下它#xff0c;对此#xff0c;我只想说#xff1a; 今天你对作业爱理不理#xff0c;明天它就让你补到飞起 DP先放放#xff0c;我们要雨露均沾练习上手#xff1a;乘法逆元题目题解代码实现曹冲养猪?#xff08;互质的…虽然作业还没有做完但是我还是放不下它对此我只想说 今天你对作业爱理不理明天它就让你补到飞起
DP先放放我们要雨露均沾练习上手乘法逆元题目题解代码实现曹冲养猪?互质的中国剩余定理题目题解代码实现Strange Way to Express Integers不互质的中国剩余定理题目题解代码实现练习上手乘法逆元
题目 题解
对于这种求[1n]区间的乘法逆元 费马小定理? 扩展欧几里得? 这两种对于求单个是比较有用的Onlogn 但是对于这种区间求解就需要On的线性筛了
for ( int i 2;i n;i )inv[i] inv[p % i] * ( p - p / i ) % p;至于为什么是这样子的我们来进行简单推理 首先应该要了解 对于数字A,B存在A∗X≡1modBA*X≡1mod BA∗X≡1modB则称X为A对B的逆元。 一般这个乘法逆元是运用在需要取模而过程中又涉及到除法运算的时候 将其转化为乘法计算
进入证明? 记Tp/i,KpTp/i,KpTp/i,Kp%iii 则有KT∗ipKT*ipKT∗ip被除数等于商乘除数加余数 即KT∗i≡0(modKT*i≡0 (modKT∗i≡0(mod p)p)p) 变形K≡−T∗i(modK≡-T*i(modK≡−T∗i(mod p)p)p) 两边同时除以i∗Ki*Ki∗K –1/i≡−T/K(mod1/i≡-T/K(mod1/i≡−T/K(mod p)p)p) 1/i1/i1/i就是i的逆元 因为这两个相乘取模p同余1同时除以K就相当于乘以K的逆元 接下来将Tp/i,KpTp/i,KpTp/i,Kp%iii带入进去? inv[i]−p/i∗inv[pinv[i]-p/i*inv[pinv[i]−p/i∗inv[p%i]i]i](mod p)p)p) 为了防止出现负数就加一个p∗inv[pp * inv[pp∗inv[p%i]i]i]利用取模的运算律 inv[i]inv[pinv[i] inv[pinv[i]inv[p%i]∗(p−p/i)i] * ( p - p / i )i]∗(p−p/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%bc那么如果x%bc * 2此时有xa * 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的最小非负整数解 我们先考虑只有两个数该怎么处理 可以得到 xa1k1∗m1xa1k1*m1xa1k1∗m1 xa2k2∗m2xa2k2*m2xa2k2∗m2 k2∗m2−k1∗m1a1−a2k2*m2-k1*m1a1-a2k2∗m2−k1∗m1a1−a2 四不四很像 axbycaxbycaxbyc 设m1,m2的gcd为ga1−a2ca1-a2ca1−a2c 1当c不是g的倍数时exgcd无解 2)如果是 则用exgcd求出k2∗m2(−k1)∗m1gcd(m1,m2)k2*m2(-k1)*m1gcd(m1,m2)k2∗m2(−k1)∗m1gcd(m1,m2) 因为c是g的倍数两边同时乘以一个c/g即k1乘上c/g得到 k2∗m2(−k1)∗m1c解为−k1k2*m2(-k1)*m1c解为-k1k2∗m2(−k1)∗m1c解为−k1
Xa1−k1∗m1Xa1-k1*m1Xa1−k1∗m1 这样就求出了x。 我们设这个x为x0 所以可以得到的通解为xx0k∗lcm(m1,m2)xx0k*lcm(m1,m2)xx0k∗lcm(m1,m2)
将这个方程转化一下可以得到一个新的同余方程 xx0(modxx0(modxx0(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)*m1gcd(m1,m2)这里M就是m1m[i]就是m2xy是对应的k系数
c R - a[i];
x c / gcd * x % m[i];
//x此时就是k2*m2(-k1)*m1c中的-k1
R - x * M;
//更新新的X答案mXa1-k1*m1(如果是➖参照这个方程)
//xx0k*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/diannao/92643.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!