﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>C++博客-&amp;豪-文章分类-数论</title><link>http://www.cppblog.com/qywyh/category/1075.html</link><description>豪-&gt;blog</description><language>zh-cn</language><lastBuildDate>Tue, 20 May 2008 07:46:07 GMT</lastBuildDate><pubDate>Tue, 20 May 2008 07:46:07 GMT</pubDate><ttl>60</ttl><item><title>质数初步</title><link>http://www.cppblog.com/qywyh/articles/3941.html</link><dc:creator>豪</dc:creator><author>豪</author><pubDate>Thu, 09 Mar 2006 09:36:00 GMT</pubDate><guid>http://www.cppblog.com/qywyh/articles/3941.html</guid><wfw:comment>http://www.cppblog.com/qywyh/comments/3941.html</wfw:comment><comments>http://www.cppblog.com/qywyh/articles/3941.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cppblog.com/qywyh/comments/commentRss/3941.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/qywyh/services/trackbacks/3941.html</trackback:ping><description><![CDATA[<DIV class=postTitle>&lt;转&gt;</DIV>
<DIV class=postText>
<H2>模p运算</H2>
<P>给定一个正整数p，任意一个整数n，一定存在等式 <PRE>          <B>n = kp + r</B>
</PRE>
<P>其中k、r是整数，且 0 ≤ r &lt; p，称呼k为n除以p的商，r为n除以p的余数。</P>
<P>对于正整数p和整数a,b，定义如下运算： 
<UL type=disc>
<LI>取模运算：a mod p 表示a除以p的余数。 
<LI>模p加法：(a + b) mod p ，其结果是a+b算术和除以p的余数，也就是说，(a+b) = kp +r，则 (a+b) mod p = r。 
<LI>模p减法：(a-b) mod p ，其结果是a-b算术差除以p的余数。 
<LI>模p乘法：(a × b) mod p，其结果是 a × b算术乘法除以p的余数。 </LI></UL>
<P>可以发现,模p运算和普通的四则运算有很多类似的规律，如： 
<TABLE border=1>
<TBODY>
<TR>
<TH>规律</TH>
<TH>公式</TH></TR>
<TR>
<TD>结合率</TD>
<TD>((a+b) mod p + c)mod p = (a + (b+c) mod p) mod p<BR>((a*b) mod p * c)mod p = (a * (b*c) mod p) mod p</TD></TR>
<TR>
<TD>交换率</TD>
<TD>(a + b) mod p = (b+a) mod p <BR>(a × b) mod p = (b × a) mod p</TD></TR>
<TR>
<TD>分配率</TD>
<TD>((a +b)mod p × c) mod p = ((a × c) mod p + (b × c) mod p) mod p</TD></TR></TBODY></TABLE>
<P>简单的证明其中第一个公式： <PRE> <B>((a+b) mod p + c) mod p = (a + (b+c) mod p) mod p</B>
 假设
 a = k<SUB>1</SUB> p + r<SUB>1</SUB>
 b = k<SUB>2</SUB> p + r<SUB>2</SUB>
 c = k<SUB>3</SUB> p + r<SUB>3</SUB>
 
 a+b = (k<SUB>1</SUB> + k<SUB>2</SUB>) p + (r<SUB>1</SUB> + r<SUB>2</SUB>)
 如果(r<SUB>1</SUB> + r<SUB>2</SUB>) &gt;= p ，则
    (a+b) mod p = (r<SUB>1</SUB> + r<SUB>2</SUB>) -p
 否则
    (a+b) mod p = (r<SUB>1</SUB> + r<SUB>2</SUB>)
 再和c进行模p和运算，得到
     结果为  r<SUB>1</SUB> ＋  r<SUB>2</SUB> +  r<SUB>3</SUB>的算术和除以p的余数。
 对右侧进行计算可以得到同样的结果，得证。
</PRE>
<H2>模p相等</H2>
<P>如果两个数a、b满足a mod p = b mod p，则称他们模p相等，记做 <PRE> a ≡ b mod p
可以证明，此时a、b满足 a = kp + b，其中k是某个整数。
</PRE>
<P>对于模p相等和模p乘法来说，有一个和四则运算中迥然不同得规则。在四则运算中，如果c是一个非0整数，则 <PRE>       ac = bc 可以得出  a =b
</PRE>
<P>但是在模p运算中，这种关系不存在，例如： <PRE> (3 x 3) mod 9 = 0
 (6 x 3) mod 9 = 0
 但是
 3 mod 9 = 3
 6 mod 9 =6
</PRE>
<P><STRONG>定理（消去律）：如果gcd(c,p) ＝ 1 ，则 ac ≡ bc mod p 可以推出 a ≡ b mod p</STRONG></P><PRE> 证明：
 因为ac ≡ bc mod p
 所以ac = bc + kp，也就是c(a-b) = kp
 因为c和p没有除1以外的公因子，因此上式要成立必须满足下面两个条件中的一个
 1) c能整除k
 2) a = b
 如果2不成立，则c|kp
 因为c和p没有公因子，因此显然c|k，所以k = ck'
 因此c(a-b)kp可以表示为c(a-b) =ck'p
 因此a-b = k'p，得出a ≡ b mod p
 如果a = b，则a ≡ b mod p 显然成立
 得证
</PRE>
<H2>欧拉函数</H2>
<P>欧拉函数是数论中很重要的一个函数，欧拉函数是指：对于一个正整数n，小于n且和n互质的正整数的个数，记做：φ(n)，其中φ(1)被定义为1，但是并没有任何实质的意义。</P>
<P>定义小于n且和n互质的数构成的集合为Zn，称呼这个集合为n的完全余数集合。</P>
<P>显然，对于素数p，φ(p)= p -1.对于两个素数p、q，他们的乘积n = pq 满足φ(n) =(p-1)(q-1)</P><PRE>        证明：对于质数p,q，满足φ(n) =(p-1)(q-1)
        考虑n的完全余数集Zn = { 1,2,....,pq -1}
        而不和n互质的集合由下面三个集合的并构成：
        1) 能够被p整除的集合{p,2p,3p,....,(q-1)p} 共计q-1个
        2) 能够被q整除的集合{q,2q,3q,....,(p-1)q} 共计p-1个
        3) {0}
        很显然，1、2集合中没有共同的元素，因此Zn中元素个数 ＝ pq - (p-1 + q- 1 + 1) = (p-1)(q-1)
</PRE>
<H2>欧拉定理</H2>
<P><STRONG>对于互质的整数a和n，有a<SUP>φ(n)</SUP> ≡ 1 mod n </STRONG></P><PRE>        证明：
        首先证明下面这个命题：
        <B>对于集合Zn={x<SUB>1</SUB>,x<SUB>2</SUB>,...,x<SUB>φ(n)</SUB>}，考虑集合
        S = {ax<SUB>1</SUB> mod n,ax<SUB>2</SUB>mod n,...,ax<SUB>φ(n)</SUB>mod n}
        则S = Zn</B>
        1) 由于a,n互质，x<SUB>i</SUB>也与n互质，则ax<SUB>i</SUB>也一定于p互质，因此
        任意x<SUB>i</SUB>，ax<SUB>i</SUB> mod n 必然是Zn的一个元素
        2) 对于Zn中两个元素x<SUB>i</SUB>和x<SUB>j</SUB>，如果x<SUB>i</SUB> ≠ x<SUB>j</SUB>
        则ax<SUB>i</SUB> mod n ≠ ax<SUB>i</SUB> mod n，这个由a、p互质和消去律可以得出。
        所以，很明显，S=Zn
        
        既然这样，那么
        （ax<SUB>1</SUB> × ax<SUB>2</SUB>×...×ax<SUB>φ(n)</SUB>）mod n
         = （ax<SUB>1</SUB> mod n × ax<SUB>2</SUB>mod n × ... × ax<SUB>φ(n)</SUB>mod n）mod n
         = （x<SUB>1</SUB> × x<SUB>2</SUB> × ... × x<SUB>φ(n)</SUB>）mod n
         考虑上面等式左边和右边
         左边等于(a<SUP>φ(n)</SUP> × （x<SUB>1</SUB> × x<SUB>2</SUB> × ... × x<SUB>φ(n)</SUB>）mod n) mod n
         右边等于x<SUB>1</SUB> × x<SUB>2</SUB> × ... × x<SUB>φ(n)</SUB>）mod n
         而x<SUB>1</SUB> × x<SUB>2</SUB> × ... × x<SUB>φ(n)</SUB>）mod n和p互质
         根据消去律，可以从等式两边约去，就得到：
         <B>a<SUP>φ(n)</SUP> ≡ 1 mod n</B>
<PRE><STRONG>推论：对于互质的数a、n，满足a<SUP>φ(n)+1</SUP> ≡ a mod n</STRONG>
<H2>费马定理</H2>
<P><STRONG>a是不能被质数p整除的正整数，则有a<SUP>p-1</SUP> ≡ 1 mod p</STRONG></P>
<P>证明这个定理非常简单，由于φ(p) = p-1，代入欧拉定理即可证明。</P>
<P><STRONG>同样有推论：对于不能被质数p整除的正整数a，有a<SUP>p</SUP> ≡ a mod p</STRONG></P></PRE></PRE></DIV><img src ="http://www.cppblog.com/qywyh/aggbug/3941.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/qywyh/" target="_blank">豪</a> 2006-03-09 17:36 <a href="http://www.cppblog.com/qywyh/articles/3941.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>