fork download
  1. #include <iostream>
  2.  
  3. using namespace std;
  4. class RandomGenerator{
  5. protected:
  6. unsigned int seed;
  7.  
  8. const long long int M;
  9. const long long int a;
  10. const long long int b;
  11.  
  12. public:
  13. RandomGenerator(unsigned int, long long, long long, long long);
  14.  
  15. virtual long double generate() const = 0;
  16. };
  17.  
  18. RandomGenerator::RandomGenerator(unsigned int seed, long long M, long long a, long long b) : seed(seed), M(M), a(a), b(b) {}
  19.  
  20. long double RandomGenerator::generate() const{
  21. static long long prv = seed;
  22.  
  23. return (long double) (prv = (a * prv + b) % M) / (M-1);
  24. }
  25.  
  26. class RandU : public RandomGenerator {
  27.  
  28. private:
  29. static const long long M = 2147483648LL;
  30. static const long long a = 65539;
  31. static const long long b = 0;
  32.  
  33. public:
  34. RandU(unsigned int);
  35.  
  36. virtual long double generate() const;
  37. };
  38.  
  39. RandU::RandU(unsigned int nseed): RandomGenerator(nseed, M, a, b){}
  40.  
  41. long double RandU::generate() const{
  42. return RandomGenerator::generate();
  43. }
  44.  
  45. int main() {
  46. cout << sizeof(RandomGenerator) << endl;
  47. cout << sizeof(RandU) << endl;
  48. return 0;
  49. }
Success #stdin #stdout 0.01s 2680KB
stdin
Standard input is empty
stdout
32
32