zoukankan      html  css  js  c++  java
  • P2044 随机数生成器

    链接:https://www.luogu.org/problem/show?pid=2044#sub

    题目描述
    
    栋栋最近迷上了随机算法,而随机数是生成随机算法的基础。栋栋准备使用线性同余法(Linear Congruential Method)来生成一个随机数列,这种方法需要设置四个非负整数参数m,a,c,X[0],按照下面的公式生成出一系列随机数{Xn}:
    
                           X[n+1]=(aX[n]+c) mod m
    其中mod m表示前面的数除以m的余数。从这个式子可以看出,这个序列的下一个数总是由上一个数生成的。
    
    用这种方法生成的序列具有随机序列的性质,因此这种方法被广泛地使用,包括常用的C++和Pascal的产生随机数的库函数使用的也是这种方法。
    
    栋栋知道这样产生的序列具有良好的随机性,不过心急的他仍然想尽快知道X[n]是多少。由于栋栋需要的随机数是0,1,...,g-1之间的,他需要将X[n]除以g取余得到他想要的数,即X[n] mod g,你只需要告诉栋栋他想要的数X[n] mod g是多少就可以了。
    
    输入输出格式
    
    输入格式:
    输入包含6个用空格分割的整数m,a,c,X[0],n和g,其中a,c,X[0]是非负整数,m,n,g是正整数。
    
    输出格式:
    输出一个数,即X[n] mod g
    
    输入输出样例
    
    输入样例#111 8 7 1 5 3
    输出样例#12
    说明
    
    计算得X[n]=X[5]=8,故(X[n] mod g) = (8 mod 3) = 2
    
    100%的数据中n,m,a,c,X[0]<=10^18,g<=10^8
    题干

    没找出错误,有空再调。

    #include<iostream>
    #include<cstdio>
    #include<queue>
    #include<vector>
    #include<algorithm>
    #include<math.h>
    #include<cstring>
    using namespace std;
    #define  LL   unsigned long long
    unsigned long long  m,a,c,x0,n,g;
    struct node {
        unsigned long long  v[3][3];
    }x,b,ans,p;
    node cheng(node x,node y)
    {
        for(LL i=1;i<=2;i++)
        for(LL j=1;j<=2;j++)
        {
            p.v[i][j]=0;
            for(LL k=1;k<=2;k++)
            p.v[i][j]=(p.v[i][j]+x.v[i][k]*y.v[k][j])%m;
        }
        return p;
    }
    void fastlow()
    {
        while(n)
        {
            if(n%2)    ans=cheng(ans,x);
            x=cheng(x,x);n/=2;
        }
    }
    int main()
    {
        cin>>m>>a>>c>>x0>>n>>g;
        x.v[1][1]=a%m,x.v[1][2]=0;
        x.v[2][1]=c%m,x.v[2][2]=1;
        
        b.v[1][1]=x0%m,b.v[1][2]=1;
        b.v[2][1]=b.v[2][2]=0;
        
        n--; 
        ans=cheng(b,x);
        fastlow();
        
        cout<<ans.v[1][1]%g;
        return 0;    
    }
    代码60
  • 相关阅读:
    83. Remove Duplicates from Sorted List
    35. Search Insert Position
    96. Unique Binary Search Trees
    94. Binary Tree Inorder Traversal
    117. Populating Next Right Pointers in Each Node II
    116. Populating Next Right Pointers in Each Node
    111. Minimum Depth of Binary Tree
    169. Majority Element
    171. Excel Sheet Column Number
    190. Reverse Bits
  • 原文地址:https://www.cnblogs.com/CLGYPYJ/p/7375257.html
Copyright © 2011-2022 走看看