Thema: Delphi from C# to delphi

Einzelnen Beitrag anzeigen

sdean

Registriert seit: 5. Dez 2009
64 Beiträge
 
#1

from C# to delphi

  Alt 22. Dez 2022, 14:00
Delphi-Version: 11 Alexandria
Hello can someone help me porting this C# code into Delphi :

Code:
internal static ulong PQFactorize(ulong pq)
      {
         if (pq < 2) return 1;
         var random = new Random();
         ulong g = 0;
         for (int i = 0, iter = 0; i < 3 || iter < 1000; i++)
         {
            ulong q = (ulong)random.Next(17, 32) % (pq - 1);
            ulong x = ((ulong)random.Next() + (ulong)random.Next() << 31) % (pq - 1) + 1;
            ulong y = x;
            int lim = 1 << (Math.Min(5, i) + 18);
            for (int j = 1; j < lim; j++)
            {
               iter++;
               ulong res = q, a = x;
               while (x != 0)
               {
                  if ((x & 1) != 0)
                     res = (res + a) % pq;
                  a = (a + a) % pq;
                  x >>= 1;
               }
               x = res;
               ulong z = x < y ? pq + x - y : x - y;
               g = gcd(z, pq);
               if (g != 1)
                  break;

               if ((j & (j - 1)) == 0)
                  y = x;
            }
            if (g > 1 && g < pq)
               break;
         }
         if (g != 0)
         {
            ulong other = pq / g;
            if (other < g)
               g = other;
         }
         return g;

         static ulong gcd(ulong left, ulong right)
         {
            while (right != 0)
            {
               ulong num = left % right;
               left = right;
               right = num;
            }
            return left;
         }
      }
  Mit Zitat antworten Zitat