zoukankan      html  css  js  c++  java
  • 2013年3月百度之星A题

    伪随机数生成器

    题目描述

     baidu熊最近在学习随机算法,于是他决定自己做一个随机数生成器。

    这个随机数生成器通过三个参数c, q, n作为种子, 然后它就可以通过以下方式生成伪随机数序列:

    m0c,

    mi+1= (q2mi + 1) mod 2n,    for all i >= 0.

     

    因为一些奇怪的原因,q 一定是奇数。现在du熊想知道对于一个给定的数 x ,是不是会出现在这个伪随机数序列里面,如果存在的话,他还想知道最早是在哪里出现,即给定一个整数 x ,要求找出一个最小的整数 k 满足 mkx.

    输入格式

    输入包含多组数据。

    每个测试数据包含一行三个整数: c, q, n, x.

    数据满足0 <= c < 2n, 0 <= q2 < 263, 0 < n <= 63, 0 <= x < 263.

    输入以文件结束符结尾。

    输出格式

    对应每个测试数据输出满足条件的k,如果x不会出现在序列里面的话,就输出-1。

    样例输入
    1 3 3 5
    1 3 2 5
    样例输出
    4
    -1

    这道题第一感觉觉得应该是用费马小定理或者欧拉定理之类的东西,再分析递推,后来才发现想错了,浪费了很多时间,暂时也不知道代码写的对不对,测试了几组都是对的,到时候确认了再发代码吧。

    很容易知道循环节是2^n,白晔说当n充分小的时候,Mi=i+c(mod2^n).........如果n过大,就得加上一个2^m。。那是不是不会通过所有的数据。。。

  • 相关阅读:
    Oracle结构连接配置结构
    理解cookie和session机制
    Asp.net中网站级异常捕获
    C#字符串函数大全
    一个简单的C#多线程间同步的例子
    SQL中的存储过程存放位置
    类和结构的区别?
    SQL点滴9—使用with语句来写一个稍微复杂sql语句
    Asp.NET 的Session实现原理 转自21kaiyun.com
    Script to analyze table space usage
  • 原文地址:https://www.cnblogs.com/whatthefy/p/2991025.html
Copyright © 2011-2022 走看看