C-中间平方随机数生成器

时间:2018-09-24 19:54:36

标签: c random generator

因此,我尝试实现Middle Square PRNG方法,以生成前100个数字。直到某个点,当我得到负数时,它都可以正常工作。 我使用时间库更改了temp数组上的值,以免卡在同一序列上,该序列的数字以两个零结尾。

我的代码:

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

time_t now;
struct tm *tm;

unsigned long int prng(int seed)
{
    int num = seed * seed;
    int t[10], inc = 0;
    //Reverse number in an array
    while(num != 0)
    {
        t[inc] = num%10;
        num /= 10;
        inc++;
    }
    int min = inc/4;
    int max = inc / 2 + min;
    int temp[10];

    //Assign the middle square part to another table
    for(int i = min; i <= max; i++)
    {
        temp[i-min] = t[i];
    }

    for(int i=0; i < max-min; i++)
    {
        //Check if there is a "0" "0" sequence, if TRUE - replace with current time (seconds)
        if(temp[i] == 0 && temp[i+1] == 0)
        {
            now = time(0);
            tm = localtime(&now);
            temp[i] = tm->tm_sec/10;
            temp[i + 1] = tm->tm_sec%10;
        }
    }

    //Transform the squared array into an integer
    unsigned long int k = 0;
    for (int i = 0; i <= max-min; i++)
        k = 10 * k + temp[i];


    return k;
}

int main()
{
    unsigned long int n = 123; //seed
    printf("%d ", n);
    for(int i = 0; i<100; i++)
    {
        n = prng(n);
        printf("\n%d ", n);
    }
    return 0;
}

我得到的结果:

123
215
226
701
419
6557
24992
7064
7099
85930
-696950
8997
6490
10212
94824
36561
760763
-724206
30238
66334
22325
65048
-94273
...

0 个答案:

没有答案