コード例 #1
0
 static void CalculatePrimePhi()
 {
     for (int i = 2; i <= MAXINT; i++)
     {
         if (primes[i])
         {
             phiResult[i] = i - 1;
             continue;
         }
         List <int> frac      = fg.GeneratorFactorsBelowOneMillion(i);
         var        fracGroup = frac.GroupBy(x => x);
         int        count     = fracGroup.Count();
         if (count == 1)
         {
             phiResult[i] = EulerTotientFunction.Calculate(i);
             continue;
         }
         phiResult[i] = 1;
         foreach (var item in fracGroup)
         {
             int num       = item.First();
             int itemcount = item.Count();
             int sumNum    = (int)Math.Pow(num, itemcount);
             phiResult[i] *= phiResult[sumNum];
         }
     }
 }
コード例 #2
0
 static int Phi(int num)
 {
     if (phiResult[num] != 0)
     {
         return(phiResult[num]);
     }
     return(EulerTotientFunction.Calculate(num));
 }