• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            隨筆 - 87  文章 - 279  trackbacks - 0
            <2025年5月>
            27282930123
            45678910
            11121314151617
            18192021222324
            25262728293031
            1234567

            潛心看書研究!

            常用鏈接

            留言簿(19)

            隨筆分類(81)

            文章分類(89)

            相冊

            ACM OJ

            My friends

            搜索

            •  

            積分與排名

            • 積分 - 216403
            • 排名 - 117

            最新評論

            閱讀排行榜

            評論排行榜

            歐拉函數(shù)一般形式:
            當 n 為素數(shù)時: phi(n) = n-1
            當 n 為合數(shù)時: phi(n) = n∏(1-1/p) 其中(p為n的素數(shù)因子)

            題目pku1091,要求我們求 x1..xn,m這樣的序列的個數(shù),其中xi(1<=i<=n), 使 gcd(x1, ..,xn,m)=1;
            我們按歐拉函數(shù)的形式猜想如下方程:
            當 n 為素數(shù)時: phi(m,n) = m^n-1
            當 n 為合數(shù)時: phi(m,n) = m^n∏(1-1/p^n) 其中(p為n的素數(shù)因子)

            不給出嚴格數(shù)學證明(不會-_-),上兩式具體含義:
            當 n為素數(shù) phi(m,n) = m^n-1 顯然成立
            當 n 為合數(shù)時 可以假象有一個m進制n位的數(shù),然后其中一位有m的約數(shù)p的概率為1/p, 則n位同時有p的約數(shù)的概率就為(1-1/p^n), 運用乘法原理,可以得式 phi(m,n) = m^n∏(1-1/p^n)
             
            code:

            #include <iostream>
            using namespace std;

            typedef __int64 llong;
            const llong MAXN = 110000;
            llong tf[MAXN], su[MAXN], ns, num[MAXN], nn;

            void  init() {
                llong i, j;
                
            for (i=2; i<MAXN; i++) {
                    
            if (!tf[i]) {
                        su[ns
            ++]=i;
                        
            for (j=i*i; j<MAXN; j+=i) tf[j]=1;
                    }
                }
            }

            llong ppow(llong a, llong b) {
                llong ret
            =a;
                llong i;
                
            for (i=1; i<b; i++) ret *= a;
                return ret;
            }

            int main() {
                llong n, m, i, p;
                llong ans
            =0;
                init();
                
            while (scanf("%I64d%I64d"&n, &m)!=EOF) {
                    p
            =m; nn=0; ans=0;
                    
            for (i=0; i<ns; i++) {
                        
            if (p%su[i]==0) {
                            
            while (p%su[i]==0) p/=su[i];
                            num[nn
            ++]=su[i];
                        }
                        
            if (p==1) break;
                    }
                    
            if (!nn) {
                        ans 
            = ppow(m,n)-1;
                    } 
            else {
                        ans 
            = ppow(m,n);
                        
            for (i=0; i<nn; i++) {
                            ans 
            = ans/ppow(num[i],n)*(ppow(num[i],n)-1);
                        }
                    }
                    printf(
            "%I64d\n", ans);
                }
                return 
            0;
            }
            posted @ 2007-09-02 22:57 豪 閱讀(2492) | 評論 (4)編輯 收藏

            (1)定理:設x0,x1,x2,...是無窮實數(shù)列,xj>0,j>=1,那么,
                  (i)對任意的整數(shù) n>= 1, r>=1有
                        <X0,...,Xn-1,Xn,...,Xn+r> = <X0,...,Xn-1,<Xn,...,Xn+r>> 
                        =   <X0,...,Xn-1,Xn+1/<Xn+1,...,Xn+r>>.
                  特別地有
                        <X0,...,Xn-1,Xn,Xn+1> = <X0,...,Xn-1,Xn+1/Xn+1>
                  注:用該定理可以求連分數(shù)的值

            (2)對于連分數(shù)數(shù)數(shù)列 <X0,...Xn> 有遞推關系:
                  Pn = XnPn-1+Pn-2;
                  Qn = XnQn-1+Qn-2;
                  定義:  P-2 = 0; P-1 = 1; Q-2 = 1; Q-1 = 0;
                  所以:  P0 = X0; Q0 = 1; P1 = X1X0+1; Q1 = X1;
                  特別地:當 Xi=1 時, {Pn}, {Qn}為Fbi數(shù)列


            (3)pell方程: x^2+ny^2=+-1的解法:
                  若n是平方數(shù),則無解, 否則:
                  先求出sqrt(n)的連分數(shù)序列<x0,x1..xn> 其中xn = 2*x0;
                  對于 x^2+ny^2=-1
                  若n為奇數(shù),則 x=Pn-1, y=Qn-1; n為偶數(shù)時無解
                  對于 x^2+ny^2=1
                  若n為偶數(shù),則 x=Pn-1, y=Qn-1; n為奇數(shù)時x=P2n-1, y=Q2n-1
                  注:以上說的解均為最小正解
                  
                  
                  
                  

            posted @ 2007-08-28 14:59 豪 閱讀(1312) | 評論 (2)編輯 收藏

            問題簡單來說就是 a = ai (mod ni)   求未知數(shù)a,
             以下小結略去證明, 只是對定理作了必要的解釋, 要了解相關定理,可查閱數(shù)論資料.

            中國余數(shù)定理:
                  設 n=n1*n2...nk, 其中因子兩兩互質.有:  a-----(a1,a2,...,ak), 其中ai = a mod ni, 則 a和(a1,a2,...,ak)關系是一一對應的.就是說可以由 a求出(a1,a2,...,ak), 也可以由(a1,a2,...,ak)求出a

            推論1:
                  對于 a=ai  (mod ni) 的同余方程,有唯一解

            下面說說由(a1, a2, ..., ak)求a的方法:
            定義 mi = n1*n2*...nk / ni;   ci = mi(mf  mod ni);   其中 mi*mf  mod ni = 1;
                     則 a = (a1*c1+a2*c2+...+ak*ck)      (mod n)      (注:由此等式可求a%n, 當n很大時)

            中國剩余定理關鍵是mf的求法,如果理解了擴展歐幾里得 ax+by=d, 就可以想到:
                                 mi*mf  mod ni = 1 => mi*mf+ni*y=1;

            代碼如下:

             

            #include <iostream>
            #include 
            <cmath>
            using namespace std;

            const int MAXN = 100;
            int nn, a[MAXN], n[MAXN];

            int egcd(int a, int b, int &x, int &y) {
                
            int d;
                
            if (b == 0) {
                    x 
            = 1; y = 0;
                    return a;
                } 
            else {
                    d 
            = egcd(b, a%b, y, x);
                    y 
            -= a/b*x;
                    return d;
                }
            }

            int lmes() {
                
            int i, tm=1, mf, y, ret=0, m;
                
            for (i=0; i<nn; i++) tm *= n[i];
                
            for (i=0; i<nn; i++) {
                    m 
            = tm/n[i];
                    egcd(m, n[i], mf, y);
                    ret 
            += (a[i]*m*(mf%n[i]))%tm;
                }
                return (ret
            +tm)%tm;
            }

            int main() {
                a[
            0= 4; a[1= 5;
                n[
            0= 5; n[1= 11;
                nn 
            = 2;
                printf(
            "%d\n", lmes());
                return 
            0;
            }


             

            posted @ 2007-08-27 16:46 豪 閱讀(11632) | 評論 (2)編輯 收藏

            對于擴展歐幾里得主要部分說明:
            1. d' = bx'+(a mod b)y', d' = gcd(b, a mod b);
                設 d = gcd(a, b), 因為 d = d', 所以
                d = d' = bx'+(a mod b)y' = bx' + (a-floor(a/b)*b)y' = ay'+b(x'-floor(a/b)y');
                故有迭代:
                x = y'; y = x'-floor(a/b)y';

            對于解方程主要部分說明:
            1.首先給出兩個定理(證明請查看相關數(shù)論書):
               A. 方程 ax = b (mod n) 有解, 當且僅當 gcd(a, n) | b;
               B. 方程 ax = b (mod n) 有d個不同的解, 其中 d = gcd(a, n);
            2.證明方程有一解是: x0 = x'(b/d) mod n;
               由 a*x0 = a*x'(b/d) (mod n)
                     a*x0 = d (b/d) (mod n)   (由于 ax' = d (mod n))
                             = b (mod n)
               證明方程有d個解: xi = x0 + i*(n/d)  (mod n);
               由 a*xi (mod n) = a * (x0 + i*(n/d)) (mod n)
                                         = (a*x0+a*i*(n/d)) (mod n)
                                         = a * x0 (mod n)             (由于 d | a)
                                         = b

            代碼如下:

            #include <iostream>
            #include 
            <cmath>
            using namespace std;

            int egcd(int a, int b, int &x, int &y) {
                
            if (b == 0) {
                    x 
            = 1; y = 0;
                    return a;
                } 
            else {
                    
            int tx, ty, d;
                    d 
            = egcd(b, a%b, tx, ty);
                    x 
            = ty; y = tx-a/b*ty;
                    return d;
                }
            }

            void mels(
            int a, int b, int n) {
                
            int tx, ty, d, x0, i;
                d 
            = egcd(a, n, tx, ty);
                
            if (b%d==0) {
                    x0 
            = ((tx*b/d)%n+n)%n;
                    
            for (i=0; i<d; i++) {
                        printf(
            "%d ", (x0+i*n/d)%n);
                    }
                } 
            else {
                    printf(
            "No solutions!");
                }
                printf(
            "\n");
            }

            int main() {
                mels(
            1430100);
                return 
            0;
            }
            posted @ 2007-08-27 11:14 豪 閱讀(2178) | 評論 (2)編輯 收藏
                好久沒寫了,主要是不知道寫什么,發(fā)個剛寫好的比較通用的堆吧,sigh~

                http://www.shnenglu.com/qywyh/articles/28653.html
            posted @ 2007-07-23 21:04 豪 閱讀(382) | 評論 (0)編輯 收藏
            僅列出標題
            共18頁: 1 2 3 4 5 6 7 8 9 Last 
            久久精品一区二区影院| 伊人久久无码精品中文字幕| 亚洲精品97久久中文字幕无码| 欧美日韩中文字幕久久伊人| 国产精品对白刺激久久久| 久久久久成人精品无码中文字幕| 久久天天躁夜夜躁狠狠| 久久久久久噜噜精品免费直播| 久久久青草久久久青草| 秋霞久久国产精品电影院| 青青草国产精品久久| 久久精品无码一区二区三区日韩| 狠狠精品干练久久久无码中文字幕| 久久精品免费网站网| 久久久久国产精品麻豆AR影院| 久久久久久亚洲精品无码| 久久亚洲精品国产精品婷婷| 区久久AAA片69亚洲| 无遮挡粉嫩小泬久久久久久久| 久久精品a亚洲国产v高清不卡| 久久―日本道色综合久久| 99热都是精品久久久久久| 人妻无码久久精品| 日日躁夜夜躁狠狠久久AV| 99久久精品免费看国产| 国产99久久九九精品无码| 久久人妻少妇嫩草AV无码蜜桃| 国产产无码乱码精品久久鸭| 国产国产成人久久精品| 国产精品美女久久福利网站| 欧美精品乱码99久久蜜桃| 亚洲综合久久夜AV | 久久国产精品成人影院| 99热都是精品久久久久久| 久久成人小视频| 亚洲国产天堂久久综合网站 | 精品久久久久中文字幕一区| 国内精品伊人久久久久影院对白 | 久久亚洲精品国产亚洲老地址| 亚洲日韩欧美一区久久久久我 | 精品人妻伦一二三区久久 |