using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApplication3
{
class Program
{
static uint[] LFSR(uint reg, int[] shift)
{
uint xor = reg & 1;
uint o = xor;
for (int i = shift.Length - 2; i >= 0; i--)
{
xor ^= (reg >> shift[i]) & 1;
}
reg = reg >> 1 | xor << shift[0];
return new uint[] { o, reg };
}
static void Main(string[] args)
{
uint reg1 = 43949, reg2 = 181, reg3 = 3613104981;
int[] shifts1 = new int[5] { 15, 5, 3, 2, 0 };
int[] shifts2 = new int[5] { 7, 4, 3, 2, 0 };
int[] shifts3 = new int[5] { 31, 7, 6, 2, 0 };
// Генерируем 100 бит
for (int i = 0; i < 100; i++)
{
uint[] rez1 = LFSR(reg1, shifts1);
uint[] rez2 = LFSR(reg2, shifts2);
uint[] rez3 = LFSR(reg3, shifts3);
reg1 = rez1[1];
reg2 = rez2[1];
reg3 = rez3[1];
// Выход генератора Геффа (функция большинства)
uint bit = (rez1[0] & rez2[0]) ^ (rez1[0] & rez3[0]) ^ (rez2[0] & rez3[0]);
Console.Write(bit);
}
Console.ReadKey();
}
}
}