<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      NOI2012 隨機數生成器

      題意:

      給定$x,y,n,a_{0},m,g$.

      定義$a_{i}=x*a_{i-1}+y\ mod\ m$

      求$a_{n}\ mod\ g$

      $n,m,x,y,a<=10^{18},g<=10^{8}$

      題解:

      當n較小,可以直接算出$a_{n}$

      可以得到$a_{n}$的通項公式  $a_{n}=x^{n}*a_{0}+y*\frac{x^{n-1}-1}{x-1}$

      當m是素數時,可以通過求解逆元得到結果.

      對于沒有特殊性質的數據該怎么做?

      我們可以把遞推式構造成矩陣

      $\begin{Bmatrix} a_{i} \\ y \end{Bmatrix}  = \begin{Bmatrix} x & 1 \\ 0 & 1 \end{Bmatrix} * \begin{Bmatrix} a_{i-1} \\ y \end{Bmatrix} $

      那就可以再$logn$內求出$a_{n}$

      但是注意 $m$是LL范圍的,所以中間結果可能會溢出.

      對于這種情況 可以使用"快速乘" 用快速冪的思路把乘法轉化成加法.這樣就可以實現LL乘法了.

      #include<cstdio>
      #include<cstring>
      #include<iostream>
      using namespace std;
      #define ll long long
      ll n,m,g,x,y,a;
      void Add(ll &x,ll y){x+=y;if(x>=m)x-=m;}
      ll mul(ll a,ll b){
          ll res=0;
          while(b){
              if(b&1)Add(res,a);
              Add(a,a);
              b>>=1;
          }
          return res;
      }
      struct Mat{
          int a,b;
          ll c[2][2];
          Mat(){c[0][0]=c[0][1]=c[1][0]=c[1][1]=0;}
          Mat operator*(const Mat &tmp)const{
              Mat t;
              for(int i=0;i<a;i++){
                  for(int j=0;j<tmp.b;j++)
                      for(int k=0;k<b;k++)
                          Add(t.c[i][j],mul(c[i][k],tmp.c[k][j]));
              }
              t.a=a,t.b=tmp.b;
              return t;
          }
          void init(int x,int y){
              a=x,b=y;
          }
      }I;
      ll calc(){
          ll b=n;
          Mat t;t.init(2,2);
          t.c[0][0]=x,t.c[0][1]=t.c[1][1]=1;
          I.init(2,1);
          I.c[0][0]=a;
          I.c[1][0]=y;
          while(b){
              if(b&1)I=t*I;
              t=t*t;
              b>>=1;
          }
          return I.c[0][0];
      }
      int main(){
      //    freopen("random.in","r",stdin);
          cin>>m>>x>>y>>a>>n>>g;
          x%=m,y%=m,a%=m;
          cout<<calc()%g<<endl;
          return 0;
      }
      View Code

       

      $By\ LIN452$

      $2017.06.09$

      posted @ 2017-06-09 15:08  LIN452  閱讀(26)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 成人午夜污一区二区三区| √天堂中文www官网在线| av永久免费网站在线观看| 亚洲国产精品一区二区久| 色哟哟www网站入口成人学校| 99精品国产在热久久婷婷| 久久精品99国产精品亚洲| 麻豆精品在线| 亚洲成av人最新无码不卡短片| 亚洲精品日韩精品久久| 欧美最新精品videossexohd| 免费观看全黄做爰大片| 日本一区二区三区黄色网| 国产在线线精品宅男网址| 亚洲性日韩精品一区二区三区| 亚洲国产精品第一区二区| 亚洲а∨天堂久久精品2021| yw尤物av无码国产在线观看| 欧洲亚洲成av人片天堂网| 国内精品大秀视频日韩精品 | 无码国模国产在线观看免费| 老河口市| 亚洲国产区男人本色vr| 成人无套少萝内射中出| 99精品热在线在线观看视| 亚洲性美女一区二区三区| 精品国产午夜福利在线观看| 18禁黄无遮挡网站免费| 亚洲一区二区三区在线观看精品中文 | 久久66热人妻偷产精品| 欧美丰满熟妇性xxxx| 韩国三级网一区二区三区| 久久久无码一区二区三区| 一日本道伊人久久综合影| 免费一级黄色好看的国产| 性色欲情网站iwww| 亚洲国产日韩欧美一区二区三区 | 亚洲中文字幕无码久久2017| 色爱av综合网国产精品| 九九热免费精品在线视频| 免费人成再在线观看视频|