Guest User

Math.DivRem vs %

a guest
Jul 18th, 2016
54
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. using System;
  2. using System.Diagnostics;
  3. using System.Security.Cryptography;
  4.  
  5. namespace ConsoleApplication1
  6. {
  7.     class Program
  8.     {
  9.         static void Main(string[] args)
  10.         {
  11.             Stopwatch sw = new Stopwatch();
  12.  
  13.             sw.Start();
  14.             for (var i = 0; i < 100000; i++)
  15.             {
  16.                 secgen(10, 6000000);
  17.             }
  18.             sw.Stop();
  19.  
  20.             Console.WriteLine(sw.ElapsedMilliseconds);
  21.  
  22.             sw.Reset();
  23.             sw.Start();
  24.             for (var i = 0; i < 100000; i++)
  25.             {
  26.                 secgen2(10, 6000000);
  27.             }
  28.             sw.Stop();
  29.             Console.WriteLine(sw.ElapsedMilliseconds);
  30.  
  31.             Console.ReadKey();
  32.         }
  33.  
  34.         private static int secgen2(int minvalue, int maxvalue)
  35.         {
  36.             Func<int, int, int, int> modular = (a, b, mod) =>
  37.             {
  38.                 var rem = a + b%mod;
  39.  
  40.                 if (rem < minvalue) rem += minvalue;
  41.  
  42.                 return rem;
  43.             };
  44.  
  45.  
  46.             byte[] entropyBytes = new byte[257];
  47.             RNGCryptoServiceProvider rng = new RNGCryptoServiceProvider();
  48.  
  49.             rng.GetBytes(entropyBytes);
  50.             int value = entropyBytes[0];
  51.             for (int i = 1; i < 257; i++)
  52.             {
  53.                 value = modular(value, entropyBytes[i], maxvalue);
  54.             }
  55.  
  56.             //MessageBox.Show(value.ToString());
  57.             return value;
  58.         }
  59.  
  60.         private static int secgen(int minvalue, int maxvalue)
  61.         {
  62.             Func<int, int, int, int> modular = (a, b, mod) =>
  63.             {
  64.                 long rem;
  65.                 Math.DivRem((long) a + (long) b, (long) mod, out rem);
  66.  
  67.                 if (rem < minvalue) rem += minvalue;
  68.  
  69.                 return (int) rem;
  70.             };
  71.  
  72.  
  73.             byte[] entropyBytes = new byte[257];
  74.             RNGCryptoServiceProvider rng = new RNGCryptoServiceProvider();
  75.  
  76.             rng.GetBytes(entropyBytes);
  77.             int value = entropyBytes[0];
  78.             for (int i = 1; i < 257; i++)
  79.             {
  80.                 value = modular(value, entropyBytes[i], maxvalue);
  81.             }
  82.  
  83.             //MessageBox.Show(value.ToString());
  84.             return value;
  85.         }
  86.     }
  87. }
  88.  
  89. // Outputs:
  90. //
  91. // 2083
  92. // 921
RAW Paste Data