首页 > 「欧拉定理」学习笔记(费马小定理)

「欧拉定理」学习笔记(费马小定理)

欧拉定理:对于互质的两个正整数$a, n$,满足$a^{φ(n)} ≡ 1  (mod n)$

证明

  设集合$S$包含所有$n$以内与$n$互质的数,共有$φ(n)$个:$$S = { x_1, x_2, ..., x_{φ(n)} } $$

  再设集合$T$:$$T = { a * x_1 \% n, a * x_2 \% n, ..., a * x_{φ(n)} \% n } $$

  由于$ x_i, n $互质,$ a, n $互质,故$a, x_i$一定不包含任何$n$的因数。所以$a * x_i, n$互质

  所以显而易见    $gcd(a * x_i \% n, n) = 1$

  显然$S$集合中的元素互不相同,下面证明$T$中集合的元素互不相同:

  证明:

    要证明$T$中集合的元素互不相同,可以证明集合 $ { a * x_1, a * x_2, ..., a * x_{φ(n)} } $ 中任意两个数对于$n$都不同余。

    可以利用反证法:

    令$m_i = a * x_i$,则集合可表示为 $ { m_1, m_2, ..., m_{φ(n)} } $ 

    设$ m_s ≡ m_r  (mod n) $,则可得$ m_s - m_r = q * n $, $ a * (x_s - x_r) = q * n $

    即$ n | (a * (x_s - x_r)) $

    由于$a ,n$互质,所以$a, n$没有除1外相同的因子,所以$x_s - x_r$含有所有n的因子。而由于$x_s, x_r$都是$n$以内的,所以$x_s - x_r < n$。

    所以$ n | (a * (x_s - x_r)) $不成立,故$T$中集合的元素互不相同。

  由于$T$中元素互不相同,而又由于$S$中的元素包含了$n$以内所有与$n$互质的数,$T$也包含了$n$以内所有与$n$互质的数。且$S, T$内的元素都是互不相同的.

  所以$S = T$

  乘起来:

  $$ x_1 *  x_2 *  ... *  x_{φ(n)}  ≡  a * x_1 *  a * x_2 * ... * a * x_{φ(n)} (mod n)$$

  $$ x_1 *  x_2 *  ... *  x_{φ(n)} ≡  a^{φ(n)} * x_1 * x_2 * ... * x_{φ(n)} (mod n)$$

  $$ a^{φ(n)} ≡  1 (mod n)$$

 

费马小定理:其实就是欧拉定理。只不过当$n$是质数时,$φ(n) = n-1$。

    $$a^{n-1} ≡ 1  (mod n)   (n为质数)$$

转载于:https://www.cnblogs.com/qixingzhi/p/9328108.html

更多相关:

  • 集合一直都是项目中非常常见的,我是一个Android开发者,集合对于我来说,在项目中使用的次数非常之多,因为使用的多,熟能生巧,所以这里呢!就给那些初学者整理一下Java当中常用的集合吧!   因为此篇文章是给初学者看到,所以对于集合的认识,我们就不从内存的角度去分析了,等你Java学到一定的时候,再去学习一下集合的底层实现,这会让...

  • 在编程中,常常需要集中存放多个数据。从传统意义上讲,数组是我们的一个很好的选择,前提是我们事先已经明确知道我们将要保存的对象的数量。一旦在数组初始化时指定了这个数组长度,这个数组长度就是不可变的,如果我们需要保存一个可以动态增长的数据(在编译时无法确定具体的数量),java的集合类就是一个很好的设计方案了。集合类主要负责保存、盛装其他...

  • 栈stack:stack 后入先出(LIFO) q.top()获取栈顶元素(并不删除)q.pop()删除栈顶元素q.push(x)向栈中加入元素q.empty()判断栈是否为空 队列queue:先入先出(FIFO)   q.front()获取队首元素(并不删除)q.pop()删除队首元素q.push(x)向队列中加入元素q....

  • resize(),设置大小(size); reserve(),设置容量(capacity); size()是分配容器的内存大小,而capacity()只是设置容器容量大小,但并没有真正分配内存。 打个比方:正在建造的一辆公交车,车里面可以设置40个座椅(reserve(40);),这是它的容量,但并不是说它里面就有了40个座椅,只能说...

  • v-for="(index,$i) in total" :key="$i":style="{left:`${itemWidth*((index-1)%rowItemCount)}px`,top:`${itemHeight*(Math.ceil(index/rowItemCount)-1)}px`}" //total是显示总数量 //l...

  •   技巧一(推荐指数★★★★★) 采用top、right、bottom、left,可以不在乎父元素的宽度和高度,对GPU损耗低于技巧三,但是对浏览器内存的消耗高于技巧三 .子元素 {/*父元素需要position: relative|absolute;*/position: absolute;margin: auto;to...

  • 设计一个支持 push,pop,top 操作,并能在常数时间内检索到最小元素的栈。 push(x) – 将元素 x 推入栈中。pop() – 删除栈顶的元素。top() – 获取栈顶元素。getMin() – 检索栈中的最小元素。 示例: MinStack minStack = new MinStack(); minStack...

  •    今天下午下班之后跟同事出去逛了一下,因为上班的地方比较偏远,自己就住在公司旁边,所以平常一般都不出去,所以今天趁着有几个人一起,跟着他们一起去了广州5号停机坪广场逛了一下,哎,发现逛街真是个累活儿啊,走来走去,有没看中什么东西要买的,看中想买的又付不起钱,所以逛到最后实在逛不下去了,所以坐车回来了,那个累啊。    期间看上...