24h購物| | PChome| 登入
2009-10-29 11:34:35| 人氣898| 回應0 | 上一篇 | 下一篇

大師求冪題(求冪系列題9)

推薦 0 收藏 0 轉貼0 訂閱站台

作法 : D&C

這種題目真得是夠了,一堆到底是怎樣

/*************************************************************/

#include<stdlib.h>           
#include<stdio.h>           
int last[30]={0};     
long long int m_n[30][10000]={0},ANS[10000]={0};     
int make(int n,int m)           
{           
    m_n[0][0]=m;           
    int a,b,c;           
    for(a=0;a<=n;a++) last[a]=0;            
    last[0]=2;           
    for(a=1;a<=n;a++)           
       {           
          for(b=0;b<=last[a-1];b++)           
             for(c=0;c<=last[a-1];c++)           
                 m_n[a][b+c]+=(m_n[a-1][b]*m_n[a-1][c]);           
          for(b=0;b<=2*last[a-1];b++)        
              {                         
                 m_n[a][b+1]+=(m_n[a][b]/100000000);           
                 m_n[a][b]%=100000000;            
              }        
          for(b=2*last[a-1]+1;b>=0;b--)           
             if(m_n[a][b]!=0)            
               {  last[a]=b;  break;   }            
       }            
}            
int DC(int n,int m)           
{           
   int s[100]={0},a,b,c,d,lastA=2;           
   s[0]=n;           
   for(a=0;a<100;a++)           
      if(s[a]>=2)   {s[a+1]+=(s[a]/2);s[a]%=2;}            
      else break;           
   make(a,m);            
   ANS[0]=1;            
   for(b=0;b<=a;b++)           
      if(s[b]==1)            
         {            
            long long int temp[10000]={0};            
            for(c=0;c<=last[b];c++)           
               for(d=0;d<=lastA;d++)        
                    temp[c+d]+=(ANS[d]*m_n[b][c]);            
            for(c=0;c<=last[b]+lastA+2;c++)           
                    {            
                    temp[c+1]+=(temp[c]/100000000);           
                    temp[c]%=100000000;            
                    ANS[c]=temp[c];           
                    }            
            for(c=last[b]+lastA+2;c>=0;c--)           
               if(ANS[c]!=0)           
                  {  lastA=c;  break;  }            
         }           
     for(b=lastA;b>=0;b--)           
        if(ANS[b]!=0)            
           {    
             printf("%lld",ANS[b]);         
             for(c=b-1;c>=0;c--)
                printf("%08lld",ANS[c]);           
                printf("\n");            
             break;           
           }                 
}           
main()           
{            
        DC(86495,7);
  return 0;           
}        

台長: 來源不明
人氣(898) | 回應(0)| 推薦 (0)| 收藏 (0)| 轉寄
全站分類: 數位資訊(科技、網路、通訊、家電) | 個人分類: ZeroJudge 基礎+原創題庫 |
此分類下一篇:To Love (TL)
此分類上一篇:伏林的三角地

是 (若未登入"個人新聞台帳號"則看不到回覆唷!)
* 請輸入識別碼:
請輸入圖片中算式的結果(可能為0) 
(有*為必填)
TOP
詳全文