Этот вопрос закрыт для ответов, так как повторяет вопрос Как взломать линейный конгруэнтный генератор случайных чисел от 0 до 36?
@daniilkening

Как предсказать следующие числа для линейного конгруэтного генератора?

Линейный конгруэнтный генератор (lcg) . Ss+1 = (aS + c) mod m* В учебных целях хочу попробовать взломать функцию random языка программирования Pawn. Условия такие: Функция random(37) генерирует числа от 0 до 36. На выходе у нас числа 1 19 10 7 33 10 18 12 31 . В интернете я нашел коэффициент m этого LCG . m = 2^31 . Также есть код который дает нам возможно предугадать следующие числа , при условии , что мы знаем все 3 коэффициента .
#include <stdio.h>
#include <time.h>
#define SIZE 6
unsigned long int seed = 1;

unsigned int lcg() {
    int a = 16807;
    int c = 12345;
    unsigned int m = 2147483648;
    
    seed = (seed * a) % m;
    return seed;
    
}

int main() {

    unsigned int mods[SIZE] = {1 , 19 , 10 , 7 , 33 , 10};
    int cur = 0;
    while(cur < 6) {
        if(mods[cur] == lcg() % 37) { cur++; }
         else { cur = 0; }   
        
    }
    while(1){
    printf("%u\n",  lcg() % 37);
    getchar();
    }
    return 0;
}


Как узнать отсутствующие коэффициенты? Слышал про метод LLL , но совершенно не понимаю как он работает , и как его приметь здесь.
  • Вопрос задан
  • 130 просмотров
Ваш ответ на вопрос

Вопрос закрыт для ответов и комментариев

Потому что уже есть похожий вопрос.
Похожие вопросы