青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

隨筆 - 97, 文章 - 22, 評(píng)論 - 81, 引用 - 0
數(shù)據(jù)加載中……

HDU 3758 Factorial Simplification

題目鏈接:http://acm.hdu.edu.cn/showproblem.php?pid=3758
/*
題意:
    給定N個(gè)和M個(gè)不大于10000的數(shù)(N,M <= 1000),N個(gè)數(shù)各自的階乘的乘積
除上M個(gè)數(shù)各自階乘的乘積是一個(gè)很大的數(shù),現(xiàn)在要求將這個(gè)數(shù)表示成如下形
式:
    r1!^s1 * r2!^s2 *  * rk!^sk * t
    并且要求r1最大,相同情況下滿足s1最大;相同情況下滿足r2最大
此類推,最后輸出(ri,si)(1 <= i <= k)。

題解:
    素因子分解

思路:
    首先我們要確定r1的范圍,因?yàn)樗械臄?shù)都是在10000以內(nèi)的,那么是否
r1的范圍就是2到10000呢?答案是否定的,來考慮10002這個(gè)數(shù),他等于5001
*2,那么如果原來的數(shù)的最后結(jié)果有5001,必然能將10002湊出來,所以r1可
以大于10000,那么最大的情況是多少呢,答案是10006,因?yàn)?0007是10000
以上第一個(gè)素?cái)?shù),他不能被10000以下所有的數(shù)整除。
    確定了r1的范圍后,再來考慮如何將輸入的那么大的數(shù)表示出來,可以
采用素因子分解,10006以內(nèi)有1200多個(gè)素?cái)?shù),將N個(gè)數(shù)分別進(jìn)行素因子分解
,這里注意的是每個(gè)數(shù)實(shí)際表示的是它的階乘,所以對(duì)于每個(gè)數(shù)X,首先要枚
舉比它小的素?cái)?shù),然后采用logp(X)的分解方法,因?yàn)閷?duì)于階乘的素因子X的
素因子個(gè)數(shù)F(X, P) = X/P + F(X/P, P),這題時(shí)間卡的比較緊,最好不要用
遞歸,也可以把F(X, P)事先預(yù)處理出來。
    分別將N個(gè)數(shù)和M個(gè)數(shù)的素因子分解后,將前者所有素因子數(shù)目減去后者所
有素因子數(shù)目,最后判每個(gè)素因子的個(gè)數(shù),如果一旦有一個(gè)小于零,說明原來
的數(shù)不是一個(gè)整數(shù),直接輸出-1。否則進(jìn)行拆分。
    拆分過程是暴力做的,從10006開始枚舉,對(duì)于每個(gè)r1,r1的階乘的每個(gè)
素因子個(gè)數(shù)和原先素因子個(gè)數(shù)取一個(gè)大的,最后如果這個(gè)值不為零,說明s1
就是那個(gè)數(shù),這個(gè)是很明顯的,如果找到這樣的s1,同時(shí)也找到了最大的r1,
然后將各個(gè)素因子減去,繼續(xù)遞歸做下一層。
*/

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

#define maxn 10011
#define maxm 802

bool f[maxn];
int prime[maxn], size;
int prime_idx[maxn];

struct PrimeFactor {
    
short num;    // 素因子數(shù)量
    short pri;    // 素因子在prime[]的下標(biāo)
    PrimeFactor() {}
    PrimeFactor(
int _n, int _p) {
        num 
= _n;
        pri 
= _p;
    }

}
;
vector 
< PrimeFactor > PriFac[maxn];
int preAns[maxn][maxm];

int DFS(int n, int p) {
    
if(p < maxm)
        
return preAns[n][p];
    p 
= prime[p];
    
int s = 0;
    
while(n >= p) {
        
int tmp = n / p;
        s 
+= tmp;
        n 
= tmp;
    }

    
return s;
}


void Init() {
    
int i, j;
    
for(i = 2; i < maxn; i++{
        
if(!f[i]) {
            PriFac[i].push_back(PrimeFactor(
1, size));
            
for(j = i+i; j < maxn; j += i) {
                f[j] 
= 1;

                PrimeFactor pf;
                pf.num 
= 1;
                pf.pri 
= size;
                
int v = j / i;

                
while(!(v % i)) {
                    v 
/= i;
                    pf.num 
++;
                }

                PriFac[j].push_back(pf);
            }

            prime[size] 
= i;
            prime_idx[i] 
= size;
            
            size
++;
        }

    }


    
int nCount = 0;
    
for(i = 2; i <= 10006; i++{
        
for(j = 0; j < PriFac[i].size(); j++{
            
if(PriFac[i][j].pri < maxm)
                preAns[i][ PriFac[i][j].pri ] 
= PriFac[i][j].num;
        }

        
for(j = 0; j < maxm; j++)
            preAns[i][j] 
+= preAns[i-1][j];
    }

}


int n, m;
int prime_num[maxn];
int tmp_num[maxn];

vector 
< PrimeFactor > vecAns;

int Min(int a, int b) {
    
return a < b ? a : b;
}


void Calc(int nMax) {
    
int i, j;
    
int MaxDeg = INT_MAX;
    
for(i = nMax; i >= 2; i--{
        MaxDeg 
= INT_MAX;
        
for(j = 0; j < size && prime[j] <= i; j++{
            
if(DFS(i, j)) 
                MaxDeg 
= Min(MaxDeg, prime_num[j] / DFS(i, j));
            
if(MaxDeg == 0)
                
break;
        }


        
if(MaxDeg) {
            
break;
        }

    }


    
if(i >= 2{
        nMax 
= i;
        vecAns.push_back(PrimeFactor(MaxDeg, nMax));
        
for(i = 0; i < size && prime[i] <= nMax; i++{
            prime_num[i] 
-= MaxDeg * DFS(nMax, i);
        }

        
if(nMax > 2)
            Calc(nMax 
- 1);
    }

}


int p[maxn], q[maxn];
int c[20 + maxn];
int lowbit(int x) {
    
return x & (-x);
}


int sum(int pos) {
    
int s = 0;
    
while(pos > 0{
        s 
+= c[pos];
        pos 
-= lowbit(pos);
    }

    
return s;
}


void add(int pos, int v) {
    
while(pos < maxn) {
        c[pos] 
+= v;
        pos 
+= lowbit(pos);
    }

}


int main() {
    Init();
    
int t, i, j;
    scanf(
"%d"&t);
    
while(t--{
        scanf(
"%d %d"&n, &m);
        
for(i = 0; i < size; i++)
            prime_num[i] 
= 0;
            
        memset(c, 
0sizeof(c));
        
for(i = 0; i < n; i++{
            scanf(
"%d"&p[i]);
            add(
11);
            add(p[i]
+1-1);
        }

        
for(i = 2; i <= 10000; i++{
            
int v = sum(i);
            
if(v) {
                
for(j = 0; j < PriFac[i].size(); j++{
                    prime_num[ PriFac[i][j].pri ] 
+= PriFac[i][j].num * v;
                }

            }

        }


        memset(c, 
0sizeof(c));
        
bool flag = true;
        
for(i = 0; i < m; i++{
            scanf(
"%d"&q[i]);
            add(
11);
            add(q[i]
+1-1);
        }


        
for(i = 2; i <= 10000; i++{
            
int v = sum(i);
            
if(v) {
                
for(j = 0; j < PriFac[i].size(); j++{
                    prime_num[ PriFac[i][j].pri ] 
-= PriFac[i][j].num * v;
                    
if(prime_num[ PriFac[i][j].pri ] < 0{
                        flag 
= false;
                        
break;
                    }

                }

            }

            
if(!flag)
                
break;
        }



        
if(!flag) {
            printf(
"-1\n");
        }
else {
            vecAns.clear();
            Calc(
10006);
            
            printf(
"%d\n", vecAns.size());
            
for(i = 0; i < vecAns.size(); i++{
                printf(
"%d %d\n", vecAns[i].pri, vecAns[i].num);
            }

        }

    }


    
return 0;
}

posted on 2011-04-15 09:11 英雄哪里出來 閱讀(840) 評(píng)論(0)  編輯 收藏 引用 所屬分類: 數(shù)學(xué)

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            国产一区二区三区日韩| 国产精品裸体一区二区三区| 欧美亚洲视频| 国产亚洲欧美日韩在线一区 | 国产欧美一区二区三区在线老狼| 亚洲自拍偷拍福利| 欧美一区二区私人影院日本| 在线成人中文字幕| 亚洲国产日韩欧美一区二区三区| 欧美福利视频一区| 亚洲一区在线播放| 欧美在线电影| 亚洲精品一区二区三区婷婷月 | 欧美激情aaaa| 欧美午夜欧美| 看片网站欧美日韩| 欧美美女喷水视频| 久久国产精品久久精品国产| 老色批av在线精品| 亚洲一区久久久| 久久久久久久欧美精品| aa国产精品| 久久国产福利国产秒拍| 999在线观看精品免费不卡网站| 一区二区三区久久| 亚洲高清123| 亚洲你懂的在线视频| 亚洲电影在线免费观看| 亚洲欧美日韩专区| 亚洲视屏在线播放| 玖玖玖国产精品| 香蕉久久夜色精品国产使用方法| 免费视频一区二区三区在线观看| 亚洲永久精品大片| 欧美精品日本| 噜噜爱69成人精品| 国产精品综合久久久| 亚洲国产日本| 在线不卡a资源高清| 亚洲视频一区| 日韩亚洲欧美高清| 鲁大师影院一区二区三区| 久久高清国产| 国产精品青草久久| 99re热这里只有精品免费视频| 在线高清一区| 久久精品一区四区| 欧美影院在线播放| 国产精品国产三级国产专播品爱网| 亚洲第一色中文字幕| 合欧美一区二区三区| 性色av一区二区三区| 午夜一级久久| 国产精品劲爆视频| 一本一道久久综合狠狠老精东影业| 亚洲欧洲在线视频| 欧美国产在线电影| 亚洲人成网站777色婷婷| 亚洲福利视频专区| 裸体一区二区三区| 欧美成人自拍| 亚洲精品乱码久久久久久| 理论片一区二区在线| 欧美成人小视频| 亚洲国产精品www| 蜜臀av在线播放一区二区三区| 亚洲电影观看| 久久婷婷影院| 欧美激情一区二区三区在线| 最近中文字幕mv在线一区二区三区四区| 欧美在线观看一区二区三区| 久久久亚洲精品一区二区三区| 国产日韩欧美在线看| 久久福利精品| 欧美成人免费小视频| 亚洲美女av在线播放| 欧美日韩国产丝袜另类| 亚洲午夜在线观看视频在线| 欧美一区二区三区视频| 黄色成人小视频| 麻豆精品传媒视频| 亚洲久久一区二区| 午夜久久久久| 亚洲国产另类久久精品| 欧美日韩免费在线观看| 亚洲综合精品| 老司机精品视频一区二区三区| 亚洲国产精品一区二区三区| 欧美日本不卡| 性色av香蕉一区二区| 欧美激情一区二区三区不卡| 亚洲一区二区久久| 国产亚洲精品自拍| 欧美激情精品久久久久久蜜臀 | 一本色道久久综合亚洲二区三区| 亚洲欧美日韩系列| 在线日韩中文| 国产精品乱码妇女bbbb| 久久综合久久综合久久| 亚洲一区二区网站| 欧美成人一区二区三区片免费| 一本色道久久88综合日韩精品| 国产乱码精品1区2区3区| 母乳一区在线观看| 亚洲欧美日韩精品综合在线观看| 欧美大片免费| 久久久精品五月天| 亚洲影院免费| 亚洲理论在线| 黄色成人免费网站| 国产精品视频导航| 欧美日韩国产一区| 久久综合伊人77777| 亚洲在线成人| 夜夜嗨一区二区| 亚洲国产成人精品女人久久久| 午夜在线成人av| 亚洲深夜福利在线| 亚洲国产精品久久久久婷婷老年| 国产精品视频yy9299一区| 欧美黄色成人网| 久久综合久久综合九色| 久久国产婷婷国产香蕉| 亚洲一区二区在线免费观看视频| 亚洲欧洲精品一区| 欧美国产亚洲视频| 久久综合伊人77777蜜臀| 久久精品国产成人| 亚欧成人精品| 午夜精品久久久久久久久久久久久| 亚洲精品看片| 亚洲精品中文字幕女同| 亚洲电影av在线| 伊人狠狠色丁香综合尤物| 国产日韩欧美精品综合| 国产精品亚洲视频| 国产精品一区二区在线观看| 国产精品theporn| 国产精品久久久久9999高清| 欧美三级第一页| 欧美一区二区三区视频在线| 亚洲综合国产精品| 欧美一区二区三区四区在线 | 亚洲一区二区欧美日韩| 亚洲欧美日韩一区二区三区在线观看 | 国产精品羞羞答答xxdd| 国产精品久久夜| 国产精品美女久久久| 欧美性大战久久久久久久蜜臀| 欧美日韩亚洲一区二区| 国产精品久久77777| 国产精品一区三区| 国产一区二区欧美日韩| 国产一区二区三区久久久久久久久 | 99re这里只有精品6| 中国女人久久久| 欧美一区精品| 免费成人黄色av| 欧美日韩在线一区二区| 国产伦精品一区二区三区照片91| 国产伦精品免费视频| 尤物九九久久国产精品的特点| 亚洲国产精品一区制服丝袜 | 亚洲一区二区久久| 久久精品女人| 欧美国内亚洲| 一区二区三区欧美在线| 久久成人免费网| 欧美日韩福利在线观看| 国产精品视频999| 亚洲国产另类 国产精品国产免费| 一区二区三区精品| 久久久久久电影| 亚洲精品午夜精品| 欧美一区二区三区免费视| 欧美电影在线| 国产日韩欧美在线一区| 日韩亚洲视频| 久久久久国色av免费看影院| 亚洲人成亚洲人成在线观看 | 欧美高清在线视频| 亚洲午夜av在线| 欧美.com| 国产亚洲精品福利| 日韩视频中文| 久久午夜色播影院免费高清| 日韩午夜黄色| 麻豆精品网站| 国产欧美日韩视频在线观看| 亚洲精品日本| 理论片一区二区在线| 亚洲性夜色噜噜噜7777| 欧美国产亚洲精品久久久8v| 狠狠色伊人亚洲综合网站色| 亚洲免费影视| 日韩视频在线免费观看| 欧美大片免费| 亚洲国产精品成人精品| 久久中文在线| 欧美一区二区福利在线|