У меня есть следующий запрос IEnumerable LINQ:
var query = from p in Enumerable.Range(2, 1000000)
let sumofPowers = from ch in p.ToString()
let sumOfPowers = Math.Pow(Convert.ToDouble(ch.ToString()), 5)
select sumOfPowers
where p == sumofPowers.Sum()
select p;
Находит сумму всех чисел, которые могут быть записаны как сумма пятых степеней их цифр. Это проект Эйлера Задача 30
Работает нормально, как есть. Я знаю, что это придурок, но диапазон меня раздражает.
Я в основном догадался, что он нашел правильный результат в 1 000 000, поэтому я позволил этому остановиться на этом. В этом случае число было достаточно.
Но это просто закодированное "случайное" число.
Если вы посмотрите на код, то обнаружите, что как только значение p == sumofPowers.Sum()
истинно, вам больше не нужно выполнять цикл.
Я знаю, yield
может делать это в других ситуациях, а break
работает в обычных циклах - так что вы можете сделать в этой ситуации?