(n > 0) and (n and (n - 1) = 0)
Раз у вас паскаль, первый AND логический, второй битовый.
Второе условие — стандартный программистский приём, срезающий последний единичный бит.
UPD2. Да, ты меня слегка перехитрил с алгоритмом, но, нем не менее…
1. Если число <= 0 — без единой итерации пишет YES, что неверно.
2. Если у вас условие сложное — лучше разделить программу на проверку условия (подпрограмму или переменную типа boolean) и реакцию на это условие.
3. Стандартная ошибка начинающих: допустим, не сработало условие N mod 2 = 1. Зачем писать N mod 2 = 0, если есть else?