模拟随机数的生成,然后找出数中的固定位和非固定位,主要是位操作
#include<stdio.h>
#include<string.h>
int main()
{
int A, B, C, S, flag[65536];
char s[16];
while (scanf("%d", &A), A)
{
scanf("%d %d %d", &B, &C, &S);
memset(flag, 0, sizeof(flag));
int and = S, or = S;
while (!flag[S])
{
flag[S] = 1;
S = (A * S + B) % C;
and &= S;
or |= S;
}
int i;
for (i = 0; i < 16; i++)
{
if ((and & 1) && (or & 1))
s[i] = '1';
else if ((and & 1) || (or & 1))
s[i] = '?';
else
s[i] = '0';
and >>= 1;
or >>= 1;
}
for (i = 15; i >= 0; i--)
putchar(s[i]);
putchar('\n');
}
return 0;
}