#include < iostream >
#include < fstream >
#include < math.h >

double rannum();
void sequence(unsigned int, unsigned int);

unsigned int a, random, m, MASK;

ofstream fout("output");

void main(){
    unsigned int aaa, mmm;
    aaa=66;
    mmm=(unsigned int) pow(2, 31);
    fout << "First run" << endl;
    sequence (aaa, mmm);    //2^31
    aaa=5;
    mmm=(unsigned int) pow(2, 30);
    fout << endl << endl << "Second run" << endl;
    sequence (aaa, mmm);    //2^30
}    

void sequence(unsigned int aa, unsigned int mm){
    int count;
    double rannbr;
    a=aa;
    m=mm;
    MASK=m-1;
    random=989473241;    //this is the seed:  a large prime number
    fout << random/(double) m << '\t';
    for (count=0; count<4095; count++){
        fout << (rannbr=rannum()) << endl
             << rannbr << '\t';
    }
    fout << rannum() << endl;
}

double rannum(){
    return (random=(a*random)&MASK)/(double) m;
}