skip to navigation
skip to content

feed icon RSS хранилка

Шеста задача

Публикувано на 12.04.2007 16:33 от николай
Последна промяна на 15.04.2007 19:54
Тази публикация е от предишно издание на курса, моля не разчитайте на актуалността на информацията.

Брой точки, които дава задачата: 5.

Краен срок: 23-и април, 19:00 часа.

Формуляр за изпращане.

Условие

Прости числа наричаме цели числа, по-големи от 1, които са делят само на себе си и на 1. Първите пет прости числа са 2, 3, 5, 7 и 11.

Нека разгледаме всички наредени двойки прости числа, които удовлетворяват следните условия:

  • първото число е по-малко от второто
  • между двете няма повече от две прости числа

Пример: всички двойки, в които участва числото 11 са: (3, 11), (5, 11), (7, 11), (11, 13), (11, 17), (11, 19).

Вашата задача е да напишете безкраен генератор, който генерира всички такива двойки сортирани по сбора на двата им елемента.

Функцията, която трябва да връща този генератор трябва да се казва combinePrimes и не трябва да приема параметри.

Съвсем простичко примерче:

>>> gen = combinePrimes()
>>> gen.next()
(2, 3)
>>> gen.next()
(2, 5)

Безкрайни генератори

Що е то безкраен генератор? Генератор, който никога не свършва.

Ето един пример с такъв, който генерира целите числа от n до безкрайност:

def ints(n=0):
    while 1:
        yield n
        n += 1

Ако след това се опитате да направите for x in ints(): print x ще се изписват числа до безкрай. Също така не е добра идея да опитвате list(items()), защото това също никога няма да свърши. Безкрайните генератори са удобни, когато не искаме да се ограничаваме с конкретен максимален брой на елементите. Точно както е в нашия случай с простите числа :)

Забележки

  • Ако две двойки имат еднакъв сбор няма значение в какъв ред ще бъдат генерирани, всички варианти ще бъдат считани за верни.

Полезни функции

  • itertools.islice—по даден генератор ви връща генератор, който се ограничава само до някой елементи на дадения. Най-често се ползва за да се вземат първите n елемента на генератор, което при безкрайни такива е много полезно (вижте примерните тестове).
  • itertools.count—безкраен генератор на последователни цели числа

Примерни тестове

Връзка: p6-sample.py