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

            Why so serious? --[NKU]schindlerlee

            2009年12月21日星期一.sgu499

            2009年12月21日星期一.sgu499
            注:此文包括線性篩法,質因子分解,dfs生成一個數的所有因子

            sgu499:我想撞墻
            http://www.shnenglu.com/schindlerlee/
            那天arxor看我和angelclover在做,然后也在看題,這個題我還沒看,然后arxor大牛就給我說了個想法

            把每個數分解素因子,然后dfs出這個數的所有因子。
            對每個數進行一次此操作,最后找最大的且被訪問了兩邊以上的因子,
            但是這個方法tle在test 20了。怪我當時沒細想,被大牛隨便一說就覺得這個方法很好。。。。然后。。。杯具了

            上代碼:tle@20
             1 /*
             2  * SOUR:sgu Greatest Greatest Common Divisor
             3  * ALGO:因子分解
             4  * DATE: 2009年 12月 20日 星期日 19:24:49 CST
             5  * COMM:3http://www.shnenglu.com/schindlerlee/
             6  * */
             7 #include<iostream>
             8 #include<cstdio>
             9 #include<cstdlib>
            10 #include<cstring>
            11 #include<algorithm>
            12 using namespace std;
            13 typedef long long LL;
            14 const int maxint = 0x7fffffff;
            15 const long long max64 = 0x7fffffffffffffffll;
            16 
            17 const int N = 1000010;
            18 int vis[N], n, is_prime[N], primes[N], top;
            19 int exp[100], num[100], cnt;
            20 int can[N];
            21 void generate()
            22 {
            23     int i, j, k;
            24     top = 0;
            25     fill(is_prime, is_prime + N, 1);
            26     for (i = 2; i <= 1000000; i++) {
            27         if (is_prime[i]) {
            28             primes[top++= i;
            29         }
            30         for (j = 0; j < top && i * primes[j] <= 1000000; j++) {
            31             is_prime[i * primes[j]] = 0;
            32             if (i % primes[j] == 0)
            33                 break;
            34         }
            35     }
            36     //for(i = 0;i < top;i++) {
            37     //printf("%d\n",primes[i]);
            38     //}
            39 }
            40 
            41 void factor(int x)
            42 {
            43     //printf("factor %d\n",x);
            44     cnt = 0;
            45     for (int i = 0; i < top && x > 1; i++) {
            46         if (x % primes[i] == 0) {
            47             //printf("primes[i] = %d\n",primes[i]);
            48             can[i]++;
            49             num[cnt] = primes[i];
            50             exp[cnt] = 0;
            51             while (x % primes[i] == 0) {
            52                 exp[cnt]++;
            53                 x /= primes[i];
            54             }
            55             cnt++;
            56         }
            57     }
            58 }
            59 
            60 void dfs(int x, int level)
            61 {
            62     if (level == cnt) {
            63         //printf("dfs x= %d\n",x);
            64         vis[x]++;
            65         return;
            66     }
            67     dfs(x, level + 1);
            68     for (int i = 1; i <= exp[level]; i++) {
            69         x *= num[level];
            70         dfs(x, level + 1);
            71     }
            72 }
            73 
            74 int main()
            75 {
            76     int i, j, k;
            77     generate();
            78     scanf("%d"&n);
            79     for (i = 0; i < n; i++) {
            80         scanf("%d"&k);
            81         factor(k);
            82         dfs(10);
            83     }
            84     for (i = N - 1; i >= 0; i--) {
            85         if (vis[i] >= 2) {
            86             printf("%d\n", i);
            87             break;
            88         }
            89     }
            90     return 0;
            91 }
            92 

            然后比賽完google了以下,原來是水題,不予解釋了,貼代碼
             1 
             2 const int N = 1000010;
             3 int vis[N],n,m;
             4 void chkmax(int &x,int k) { if(x < k) x = k; }
             5 int main()
             6 {
             7     int i,j,k;
             8     scanf("%d",&n);
             9     for(i = 0;i < n;i++) {
            10         scanf("%d",&k);
            11         vis[k] ++;
            12         chkmax(m,k);
            13     }
            14 
            15     int res = 1;
            16     for(i = 2;i <= m;i++) {
            17         int tmp = 0;
            18         for(j = i;tmp < 2 && j <= m;j += i) {
            19             tmp += vis[j];
            20         }
            21         if(tmp >= 2) res = i;
            22     }
            23     printf("%d\n",res);
            24
            25     return 0;
            26 }
            27 
            28 

            結果第二天arxor,說他用那個方法過了。。。。。。。。。
            然后我看了他的代碼,我發現原來我的因子分解是沒有優化的。。。
            然后把第45行改成
                for (int i = 0; primes[i] * primes[i] <= x && i < top && x > 1; i++) {

            過了。。。。。

            posted on 2009-12-21 20:54 schindlerlee 閱讀(1094) 評論(0)  編輯 收藏 引用 所屬分類: 解題報告

            久久精品aⅴ无码中文字字幕不卡| 青青青青久久精品国产h| 亚洲国产精品无码久久青草| 亚洲精品高清一二区久久| 久久精品国产色蜜蜜麻豆| 精品国产VA久久久久久久冰 | 久久国产成人| 99久久国产综合精品女同图片| 99精品国产在热久久| 色婷婷久久综合中文久久一本| 亚洲乱码中文字幕久久孕妇黑人 | 一本大道久久香蕉成人网| 伊人久久大香线蕉综合影院首页| 99久久无色码中文字幕人妻| 一本久久a久久精品综合夜夜| 久久久国产打桩机| 久久久久久久国产免费看| 久久久久久九九99精品| 亚洲人成电影网站久久| 91久久精品91久久性色| 久久亚洲AV无码精品色午夜| 国内精品久久久久久久coent| 无码人妻少妇久久中文字幕蜜桃| 欧美久久一级内射wwwwww.| 久久久久综合网久久| 国产精品久久成人影院| 人妻无码αv中文字幕久久琪琪布| 欧美性猛交xxxx免费看久久久| 久久精品国产亚洲av水果派| 精品综合久久久久久97| 一级女性全黄久久生活片免费| 成人精品一区二区久久| 久久亚洲国产精品一区二区| 久久精品国产亚洲AV香蕉| 久久国产精品成人影院| 久久久久久亚洲AV无码专区| 久久精品aⅴ无码中文字字幕不卡| 婷婷五月深深久久精品| 久久精品无码午夜福利理论片| 亚洲国产另类久久久精品黑人| 一本一本久久A久久综合精品|