数学-剩余系

欧几里得算法与扩展欧几里得算法

递归写法

gcd

int gcd(int a,int b)
{ return !a ? b : gcd(b%a,a); }

扩欧

struct value{ int x,y; value(int x,int y):x(x),y(y){} };
value ExtEuclid(int a,int b)
{
    if(a==0) return value(0,1);
    value r=ExtEuclid(b%a,a);
    return value(r.y-b/a*r.x,r.x);
}

非递归写法

gcd

int gcd(int a,int b)
{ while(a) b=b%a,swap(a,b); return b; }

扩欧的不会.....

求剩余系中某数的乘法逆元

考虑剩余系下的除法,a/b=ab-1(mod MOD) ,有a-1a=1(mod MOD),这个算法求出a-1 ........

注意只有模数为质数时,整个剩余系的除零以外其它元素才都会有逆元.

int getrev(int p)
{ return p==0 ? -1 : (ExtEuclid(p,MOD).x%MOD+MOD)%MOD; }

具体的,要求 ax≡1(mod MOD) ,有 ax+MODy=1. 如果a与MOD的gcd不为1,则逆元不存在.

直接用扩欧来算(x,y)就行了......

未完待续

中国剩余定理

模意义下的高斯消元

求原根

时间: 2024-10-13 20:17:25

数学-剩余系的相关文章

【学习总结】数学-费马小定理

定义 p是质数,并且gcd(a,p)=1(a,p互质),那么有 ap?1≡1mod(p) 证明 准备知识 剩余类:对模n同余的整数构成的一个集合叫做模n的一个剩余类. 简化剩余系(也叫既约剩余系):模n的值与n互质的全部剩余类中,从每一类中各任取一数所组成的数的集合,叫做模n的一个简化,也叫缩系. 完全剩余系:从模n的每个剩余类中各取一个数,得到一个由n个数组成的集合,叫做模n的一个完全剩余系. 剩余系定理2:有整数a,b,c,m为正整数,且gcd(m,c)=1, 则当ac≡bcmod(m)时,

[HNOI2011]数学作业

题目描述 小 C 数学成绩优异,于是老师给小 C 留了一道非常难的数学作业题: 给定正整数 N 和 M,要求计算 Concatenate (1 .. N) Mod M 的值,其中 Concatenate (1 ..N)是将所有正整数 1, 2, -, N 顺序连接起来得到的数.例如,N = 13, Concatenate (1 .. N)=12345678910111213.小C 想了大半天终于意识到这是一道不可能手算出来的题目,于是他只好向你求助,希望你能编写一个程序帮他解决这个问题. 输入输

codeforces_346A Alice and Bob(数学)

题目链接:http://codeforces.com/problemset/problem/346/A 参考链接:http://blog.csdn.net/loy_184548/article/details/50174615 感受到数学在博弈论中的强大. 考虑最后终止状态的序列-无法取出任意两个数他们的差值不存在这个序列中:那么这必定是个首项等于公差的等差序列 而这个序列是 d 2d 3d....,因此可以通过a[1] a[2] a[3] ...的最大公约数得到 然后计算有几个数没在数组中,判

UVA 10089 Repackaging 数学问题

大致题意:给出几个包裹,每个包裹都包装好了3种大小的杯子.现在要重新包装,使向量 a[1]*(s[1][1],s[1][2],s[1][3])+a[2]*(s[2][1],s[2][2],s[2][3])+.....+a[n]*(s[n][1],s[n][2],s[n][3])=(k,k,k). 就这样转化成了向量问题其中a[i]为非负整数,k为正整数. 虽然转化成了向量问题,但是三维向量和这么多变量有点棘手,所以我们可以先降维,将原等式变化成: a[1]*(s[1][2]-s[1][1],s[

图像处理中的数学原理详解17——卷积定理及其证明

欢迎关注我的博客专栏"图像处理中的数学原理详解" 全文目录请见 图像处理中的数学原理详解(总纲) http://blog.csdn.net/baimafujinji/article/details/48467225 图像处理中的数学原理详解(已发布的部分链接整理) http://blog.csdn.net/baimafujinji/article/details/48751037 1.4.5   卷积定理及其证明 卷积定理是傅立叶变换满足的一个重要性质.卷积定理指出,函数卷积的傅立叶变

如何入门参加数学建模竞赛

1 网上资源 1.1 数学中国 可以去数学中国网站看看,在数学建模比赛的培训这一块做得很好的机构,如果自己有点银子,可以去参加他们的网上课程.另外他们有专门的数学建模群,群里面有很好关于数学建模的资料.而且这个机构自己也举办数学建模比赛,如果有时候可以在这里组队,直接参加比赛,累积一些经验,增长见识. 1.2 数学建模视频课程,现在网络上有一些比较好的关于数学建模比赛的视频资源,可以谷歌一下 1.3 网络上的一些关于数学建模的电子书,有时候你也不知道哪本书比较适合你,所以你可以先在网上找一些电子

第三周项目4-考了语文数学的学生

下面提供了类Stu的数据成员定义,和用于测试的main函数,参考如图的运行结果,完成类的定义. /* * Copyright (c) 2015,烟台大学计算机学院 * All right reserved. * 作者:邵帅 * 文件:Demo.cpp * 完成时间:2015年03月21日 * 版本号:v1.0 */ #include<iostream> #include<string> using namespace std; class Stu { private: string

51nod 1138 连续整数的和(数学)

题目描述: http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1138 给出一个正整数N,将N写为若干个连续数字和的形式(长度 >= 2).例如N = 15,可以写为1 + 2 + 3 + 4 + 5,也可以写为4 + 5 + 6,或7 + 8.如果不能写为若干个连续整数的和,则输出No Solution. Input 输入1个数N(3 <= N <= 10^9). OutPut 输出连续整数中的第1个数,如果有多

[笔记]shell编程:数学计算

在shell Script中,有好几种进行数学运算的方法,虽然有几个效果差不多,在编写程序的时候使用一种方法就够了,但是我们可能还需要学习别人的程序啊,在阅读别人的程序的时候不能不认识这些东西吧.所以,留个笔记. 一.expr 命令  --  expr 允许在命令行上处理数学表达式,但是略显拙劣. 例:$ expr 1 + 5    #注意在表达式中要有空格,如果写成1+5那么结果就不是我们想要的了. expr命令能够识别一些不同的数学和字符串操作符: 操作符 描述 arg1 | arg2 如果