Спецификация столбчатого вычислительного столбца Sql [дубликат]

Вы заканчиваете цикл слишком рано. После того, как вы проверили все возможности в теле цикла for, а не сломались, число будет простым. Поскольку одно не простое, вам нужно начинать с 2:

for num in xrange(2, 101):
    for i in range(2,num):
        if not num % i:
            break
    else:
        print num

. В более быстром решении вы пытаетесь разделить на простые числа, которые меньше или равны корню числа, которое вы тестируете. Это может быть достигнуто путем запоминания всех простых чисел, которые вы уже нашли. Кроме того, вам нужно только проверить нечетные числа (кроме 2). Вы можете поместить полученный алгоритм в генератор, чтобы вы могли использовать его для хранения простых в контейнере или просто распечатывать их:

def primes(limit):
    if limit > 1:
        primes_found = [(2, 4)]
        yield 2
        for n in xrange(3, limit + 1, 2):
            for p, ps in primes_found:
                if ps > n:
                    primes_found.append((n, n * n))
                    yield n
                    break
                else:
                    if not n % p:
                        break

for i in primes(101):
    print i

Как вы можете видеть, нет необходимости вычислять квадратный корень, быстрее хранить квадрат для каждого простого числа и сравнивать каждый делитель с этим числом.

12
задан sprocket12 2 January 2013 в 19:33
поделиться

1 ответ

CONVERT([varchar](4),@Year,(0))+'-01-01' передается на вызов DATEDIFF в позиции, где ожидается ожидаемая дата, что приводит к неявному преобразованию.

Из правил для детерминированных функций :

CAST

Определяется, если не используется с datetime, smalldatetime или sql_variant.

CONVERT

Определительно, если не существует одно из этих условий:

...

Тип источника или цели datetime или smalldatetime, другой источник или цель type является символьной строкой, и указан недетерминированный стиль. Чтобы быть детерминированным, параметр стиля должен быть константой. Кроме того, стили, меньшие или равные 100, являются недетерминированными, за исключением стилей 20 и 21. Стили более 100 являются детерминированными, за исключением стилей 106, 107, 109 и 113.

вы не вызываете никого, но вы полагаетесь на неявное преобразование, которое я ожидаю, как CAST. Вместо того, чтобы полагаться на это, я бы переключился на использование CONVERT и дал детерминированный параметр стиля.

Итак, я сделал бы: CONVERT(datetime,CONVERT([varchar](4),@Year,(0))+'0101',112) на своем месте. Сделав это, сама функция становится детерминированной

17
ответ дан Damien_The_Unbeliever 27 August 2018 в 19:07
поделиться
Другие вопросы по тегам:

Похожие вопросы: