• <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>

            杰 & C++ & Python & DM

            POJ 2115 C Looooops解題報(bào)告

                 題目鏈接:http://acm.pku.edu.cn/JudgeOnline/problem?id=2115
                 本題是一道數(shù)論的入門題,模型為求 ax = b (mod n),本題中,a = C, b = B-A, n = 2^k

                 因此使用求解模線性方程算法modular_linear。關(guān)于算法的詳細(xì)原理可參見(jiàn)歐幾里德_擴(kuò)展歐幾里德_模線性方程,這篇blog對(duì)相關(guān)的算法給出了詳細(xì)的證明,推薦。


                 下面給出本題的代碼,本題有幾點(diǎn)需要注意:
                 1.需要使用64位整數(shù)計(jì)算,因?yàn)?^32對(duì)普通整數(shù)會(huì)溢出;
                 2.第48行,在求n時(shí),因?yàn)樵贑++中,默認(rèn)0x01為int型,如果不加強(qiáng)制轉(zhuǎn)換,那么移位后會(huì)溢出;所以強(qiáng)制類型轉(zhuǎn)換是必須的。


             1 #include <cstdio>
             2 typedef long long Int64;
             3 
             4 // ax + by = d   其中d = gcd(a,b)
             5 Int64 extend_euclid(Int64 a, Int64 b, Int64& x, Int64& y)
             6 {
             7     if(b == 0)
             8     {
             9         x = 1;
            10         y = 0;
            11         return a;
            12     }
            13     else
            14     {
            15         Int64 gcd, t;
            16         gcd = extend_euclid(b, a%b, x, y);
            17         
            18         t = x;
            19         x = y;
            20         y = t - a / b * y;
            21         return gcd;
            22     }
            23 }
            24 
            25 // ax = b mod n
            26 Int64 modular_linear(Int64 a, Int64 b, Int64 n)
            27 {
            28     Int64 x = 0;
            29     Int64 y = 0;
            30     Int64 d = 0;
            31 
            32     d = extend_euclid(a,n,x,y);
            33     
            34     if(b % d == 0)
            35     {
            36         x = (x * (b / d)) % n + n;
            37         return x % (n/d);
            38     }
            39     return -1;
            40 }
            41 
            42 int main()
            43 {
            44     Int64 A,B,C,k;
            45     
            46     while(scanf("%lld%lld%lld%lld",&A,&B,&C,&k),k)
            47     {
            48         Int64 n = (Int64)0x01 << k;
            49         
            50         Int64 res = modular_linear(C, B-A, n);
            51         if(res == -1)
            52         {
            53             printf("FOREVER\n");
            54         }
            55         else
            56         {
            57             printf("%lld\n",res);
            58         }
            59     }
            60     
            61     return 0;
            62 }
            63 

                            



            posted on 2010-04-11 16:41 jaysoon 閱讀(339) 評(píng)論(0)  編輯 收藏 引用 所屬分類: ACM/ICPC

            <2025年6月>
            25262728293031
            1234567
            891011121314
            15161718192021
            22232425262728
            293012345

            導(dǎo)航

            統(tǒng)計(jì)

            常用鏈接

            留言簿

            隨筆分類

            隨筆檔案

            文章分類

            文章檔案

            收藏夾

            C++

            搜索

            最新評(píng)論

            閱讀排行榜

            評(píng)論排行榜

            欧美色综合久久久久久| 久久99久久无码毛片一区二区| 久久久久人妻一区二区三区| 精品久久久久久久久免费影院| 欧美日韩久久中文字幕| 99久久无色码中文字幕| 久久中文字幕视频、最近更新| 一本久久知道综合久久| 国产亚洲美女精品久久久| 久久婷婷国产剧情内射白浆| 成人国内精品久久久久影院| 人妻无码精品久久亚瑟影视| 久久国产精品无码HDAV| 欧美日韩精品久久久免费观看| 久久99国产精品一区二区| 国产69精品久久久久观看软件 | 狠狠色丁香久久婷婷综合蜜芽五月| 亚洲中文字幕无码久久综合网| 国产精品青草久久久久福利99| 久久久久久亚洲Av无码精品专口| 久久精品桃花综合| 久久综合视频网站| 精品一久久香蕉国产线看播放| 99久久免费国产特黄| 久久久噜噜噜久久中文福利| 性做久久久久久久久老女人| 国产精品久久久久一区二区三区| 2021久久精品国产99国产精品| 色狠狠久久AV五月综合| 久久精品aⅴ无码中文字字幕不卡| 久久久不卡国产精品一区二区 | 亚洲人成无码久久电影网站| 欧美亚洲另类久久综合婷婷| 国产精品熟女福利久久AV| 久久精品国产精品青草app| 精品乱码久久久久久久| 精品综合久久久久久888蜜芽| 天天躁日日躁狠狠久久| 午夜精品久久久久久中宇| 亚洲午夜无码久久久久| 熟妇人妻久久中文字幕|