/ SB域 / 题库 /

Persistent Bits连续位

Persistent Bits连续位

【题目描述】让我们来考虑一个随机数生成程序。这个程序会产生一个16位无符号整数序列,也就是0-65535的整数。给定整数A,B,C,S,其中1 ≤ A < 32768, 0 ≤ B < 65536, 2 ≤ C < 65536, 0 ≤ S < C。其中S表示序列的第一个数(随机种子数),序列中其它数都是由前一个数运算得到的。如果X是序列中的一个数,那么下一个数就等于:
(A * X + B) mod C
其中mod表示取余。尽管答案都是16位无符号整数,但是由于其中有乘法,计算过程还是需要使用32位整数。
随着参数选择的不同,随机数的生成会有不同的效果。最不好的情况是产生的序列中有的二进制位一直未改变。如果某个二进制位从未改变,那么这个位称为“固执”位。你的任务就是确定一个序列中哪些位是固执的。
例如,考虑当A=2,B=5,C=18,S=3时的情况。产生的序列是3,(2*3+5) mod 18=11,(2*11+5) mod 18=9,(2*9+5) mod 18=5,(2*5+5) mod 18=15,(2*15+5) mod 18=17,然后(2*17+5) mod 18=3,回到了第一个数。然后这个序列会一直重复下去。序列的数及二进制表示如下:
十进制 16位二进制
3 0000000000000011
11 0000000000001011
9 0000000000001001
5 0000000000000101
15 0000000000001111
17 0000000000010001
全部 00000000000????1
最后一行表示了哪些数位永远是0、哪些数位永远是1、哪些数位两种情况都有。本例中,16个数位中的12个是固执数位。当然,尽管每种序列最终都会进入循环,但并非每种都会回到第一个元素。例如,A=2,B=0,C=16,S=2时,序列是2,4,8,0,0,0,…
【输入文件】一行四个整数,A,B,C,S。
【输出文件】输出一行16个字符,如果这一位永远是0,输出”0”;如果这一位永远是1,输出”1”;否则,输出”?”。
【输入样例】2 5 18 3
【输出样例】00000000000????1