n = abs(number);
result = 1;
if (n mod 2 == 0) {
result = 2;
while (n mod 2 = 0) n /= 2;
}
for(i=3; i существуют некоторые тесты по модулю, которые являются лишними, поскольку n никогда не может делиться на 6, если все факторы 2 и 3 были удалены. Вы могли только позволить начала, поскольку я, которого показывают в нескольких других ответах здесь.
Вы могли на самом деле переплести решето Эратосфена здесь:
- Первый создают список целых чисел до sqrt (n).
- В для цикла отмечают все кратные числа меня до нового sqrt (n) как не главный, и используют некоторое время цикл вместо этого.
- устанавливает i на следующее простое число в списке.
Также см. этот вопрос .
Мне интересно, можно ли что-то вроде:
var custsLastAccess = db.CustAccesses
.Where(c.AccessReason.Length>0)
.GroupBy(c => c.CustID)
.Select(grp => new {
grp.Key,
LastAccess = grp
.OrderByDescending(x => x.AccessDate)
.Select(x => x.AccessDate)
.FirstOrDefault()
}).ToList();
вы также можете попробовать OrderBy ()
и Last ()
var custsLastAccess = db.CustAccesses
.Where(c.AccessReason.Length>0)
.GroupBy(c => c.CustID, (id, custs) => new { ID=id, LastAccess=custs.OrderByDescending(c=>c.AccessDate).First().AccessDate})
.Select()
.ToList();
Используя синтаксис LINQ, который, как мне кажется, выглядит чище:
var custsLastAccess = from c in db.CustAccesses
group c by c.CustID into grp
select grp.OrderByDescending(c => c.AccessDate).FirstOrDefault();