<aside> 💡 식을 위해서 주어지는 R0 이 필요하다. 이것을 씨앗 (Seed) 라고 한다.
</aside>
이론

즉, 어떤 수를 M으로 나눈 나머지는 항상 0 이상 M-1 이하의 값을 가지므로 모듈러 연산의 결과는 0 에서 M-1 이 된다.

수식
$$ R_{i+1} = (A \times R_i + B) \% M $$
그럼 최대 M 의 주기를 가지게 된다.
코드
#include <iostream>
// 유사 난수 생성기 PRNG
// PseudoRandomNumberGenerator
// 선형 합동 생성기 LCG - PRNG 의 종류
// Linear Congruential Generator
static long int seed = 100001;
double LNG()
{
seed = (125 * seed + 5) % 2796203;
return seed / (double)2796203;
}
int main(void)
{
std::cout << LNG() << std::endl;
std::cout << LNG() << std::endl;
std::cout << LNG() << std::endl;
}
static UINT32 next = 1;
int __cdecl rand(void)
{
next = next * 1103515245 + 12345;
return (UINT32)(next>>16) & RAND_MAX;
}
void __cdecl srand(unsigned int seed)
{
next = seed;
}
