Как найти в Python сумму всех кратных 3 или 5 ниже 1000?

Не уверен, что мне следовало размещать это на math.stackexchange вместо этого, но он включает больше программ, поэтому я разместил его здесь.

Вопрос кажется действительно простым, но я просидел здесь по крайней мере час, не разбираясь в этом. Я пробовал разные решения, читал математические формулы для него и т. Д., Но он не дает мне правильного ответа при его кодировании! Я сделал два разных решения, и оба они дали мне неправильный ответ. Первое решение дает мне 265334, а второе - 232169. Ответ - 233168, поэтому второе решение ближе.

Я должен упомянуть, что это вопрос из Project Euler, первый к будь точным.

Вот мой код. What is the best way to do that? First clue is to find it all, accumulate to a list and return it length. ...

I need to count all X, that some_predicate(X) and there really a lot of such X. Как лучше всего это сделать?

Первый ключ - найти все, собрать в список и вернуть его длину.

countAllStuff( X ) :-
    findall( Y
           , permutation( [1,2,3,4,5,6,7,8,9,10], Y )
           , List
           ),
    length( List, X ).

( permutation / 2 - только пример, показывающий, что существует много варианты, и это плохой способ собрать все это)

Очевидно, у меня переполнение стека.

?- countAllStuff( X ).
ERROR: Out of global stack

Тогда я пытаюсь заменить findall на setof и ничего не меняется .

Наконец, я нашел агрегатные (кликабельные) предикаты и пытаюсь его использовать.

?- aggregate(count, permutation([1,2,3,4], X), Y ).
X = [1, 2, 3, 4],
Y = 1 .

?- aggregate(count, [1,2,3,4], permutation([1,2,3,4], X), Y ).
X = [1, 2, 3, 4],
Y = 1 ;
X = [1, 2, 4, 3],
Y = 1 ;

Думаю, все это неправильно. Я предпочитаю получать что-то вроде

?- aggregate(count, permutation([1,2,3,4], X), Y ).
Y = 24 .

1) Что я делаю не так?

2) Как я могу объявить предикат, чтобы получить правильный ответ?

10
задан ДМИТРИЙ МАЛИКОВ 21 October 2014 в 18:48
поделиться