public string Run() { var phi = Totient.UpTo(ONE_MILLION); double max = 0; int idx = 0; for (int i = 1; i <= ONE_MILLION; i++) { var ratio = (double)i / (double)phi[i]; if (ratio > max) { max = ratio; idx = i; } } return(idx.ToString()); }
public string Run() { var phis = Totient.UpTo(TEN_MILLION); double minRatio = double.MaxValue; long minN = 0; for (long i = 2; i <= TEN_MILLION; i++) { if (i.IsPermutationOf(phis[i])) { var ratio = (double)i / (double)phis[i]; if (ratio < minRatio) { minRatio = ratio; minN = i; } } } return(minN.ToString()); }
public string Run() { var phi = Totient.UpTo(ONE_MILLION); return(phi.Skip(2).Sum().ToString()); }