Форум программистов, компьютерный форум, киберфорум
Python для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.68/47: Рейтинг темы: голосов - 47, средняя оценка - 4.68
0 / 0 / 0
Регистрация: 16.12.2013
Сообщений: 5

Как найти и вывести числа Мерсенна?

16.12.2013, 14:09. Показов 9944. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток! Только вчера начал кодить в пайтоне, столкнулся с проблемкой.
Написать программу, которая выводит все числа Мерсенна от 1 до n. Простое число називается числом Мерсенна, если его можно представить в виде (2^p)-1, где p — тоже простое число.
Мой код полный треш, но наброски какие-то есть.
Кликните здесь для просмотра всего текста
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
import math
 
n = int(raw_input('Enter N:'));
for i in range(1,n):
    count = 0;
    for j in range(1,n):
        if((i%j) == 0):
            count = count + 1;
    if(count == 2) or (count == 1):
        for ((2**i)-1) in range(1,n):
            count=0;
            for z in range (1,n):
                if((((2**i)-1)%z) == 0):
                    count = count + 1;
            if (count == 2) or (count == 1):
                print ((2**i)-1)
raw_input()

зараннее спасибо)

Добавлено через 44 минуты
переделал немного, но оно не хочет изменять элементы в списке
Кликните здесь для просмотра всего текста
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
from math import *
 
n = int(raw_input('Enter N:'))
lst = []
i=0
for i in range(1,n):
    count = 0;
    for j in range(1,n):
        if((i%j) == 0):
            count = count + 1;
    if(count == 2) or (count == 1):
        lst.append(i)
for i in lst:
    lst[i] = (2**i)-1
    i = i + 1
for i in lst:
    for i in range(1,n):
        count=0;
        for z in range (1,n):
            if(((lst[i])%z) == 0):
                count = count + 1;
            if (count == 2) or (count == 1):
                print lst
raw_input()


вот такое выдает
Python
1
2
    lst[i] = (2**i)-1
IndexError: list assignment index out of range
Добавлено через 56 минут
еще есть сдвиги, прога уже работает, почти, ну числа выводит, но не в промежутке от одного до n, а больше, и почему-то не один раз
Кликните здесь для просмотра всего текста
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
import math
 
n = int(raw_input('Enter N:'))
lst = []
for i in range(1,n):
    count = 0;
    for j in range(1,n):
        if((i%j) == 0):
            count = count + 1;
    if(count == 2) or (count == 1):
        lst.append(i)
k=0
for i in lst:
    lst[k] = (2**i)-1
    k = k + 1
for i in lst:
    for i in range(1,n):
        count=0;
        for z in range (1,n):
            if(((lst[i])%z) == 0):
                count = count + 1;
            if (count == 2) or (count == 1):
                print lst
raw_input()
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
16.12.2013, 14:09
Ответы с готовыми решениями:

Дано натуральное число n. Найти все числа меньшие Мр числа Мерсенна
Число Мерсенна – это простое число, представленное в виде Mp=2p–1, где p – тоже простое число.

Дано натуральное число n. Найти все числа меньшие Мр числа Мерсенна
Вот само задание и его нужно написать на Java. Дано натуральное число n. Найти все числа меньшие Мр числа Мерсенна. Число Мерсенна –...

Вывести все числа Мерсенна из заданного пользователем промежутка
вывести все числа Мерсенна из заданного пользователем промежутка . Простое число называется числом Мерсенна , если его можно представить в...

10
2742 / 2341 / 620
Регистрация: 19.03.2012
Сообщений: 8,830
16.12.2013, 15:08
Python
1
2
3
4
numbers = []
for i in range(1, 20):
    numbers.append(2 ** i - 1)
print(numbers)

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
from math import sqrt
 
n = input("Введите n=")
 
simple_numbers = [2]
numbers = []
 
for i in xrange(3, n + 1, 2):
    if i > 10 and i % 10 == 5:
        continue
    for j in simple_numbers:
        if j > int((sqrt(i)) + 1):
            simple_numbers.append(i)
            break
        if i % j == 0:
            break
    else:
        simple_numbers.append(i)
 
for i in simple_numbers:
    numbers.append(2 ** i - 1)
print(numbers)
1
0 / 0 / 0
Регистрация: 16.12.2013
Сообщений: 5
16.12.2013, 15:33  [ТС]
Цитата Сообщение от tsar925 Посмотреть сообщение
Python
1
2
3
4
numbers = []
for i in range(1, 20):
    numbers.append(2 ** i - 1)
print(numbers)

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
from math import sqrt
 
n = input("Введите n=")
 
simple_numbers = [2]
numbers = []
 
for i in xrange(3, n + 1, 2):
    if i > 10 and i % 10 == 5:
        continue
    for j in simple_numbers:
        if j > int((sqrt(i)) + 1):
            simple_numbers.append(i)
            break
        if i % j == 0:
            break
    else:
        simple_numbers.append(i)
 
for i in simple_numbers:
    numbers.append(2 ** i - 1)
print(numbers)
спасибо большое, уже намного лучше
но оно все-равно считает на в промежутке от 1 до n..
Миниатюры
Как найти и вывести числа Мерсенна?  
0
2742 / 2341 / 620
Регистрация: 19.03.2012
Сообщений: 8,830
16.12.2013, 15:51
Так а тебе что нужно? Ты проблему не озвучивал.

Добавлено через 3 минуты
Программа все выводит как ей и положено в соответствии с описанием Чисел Мерсенна в википедии http://ru.wikipedia.org/wiki/Числа_Мерсенна
0
0 / 0 / 0
Регистрация: 16.12.2013
Сообщений: 5
16.12.2013, 15:51  [ТС]
надо чтобы числа мерсенна были в промежутке от одного до n
а я так понял оно ищет только простые степени в этом промежутке, а числа соответственно больше получаются
0
2742 / 2341 / 620
Регистрация: 19.03.2012
Сообщений: 8,830
16.12.2013, 15:56
Цитата Сообщение от PashaSakhanda Посмотреть сообщение
надо чтобы числа мерсенна были в промежутке от одного до n
Программа так и выводит
0
0 / 0 / 0
Регистрация: 16.12.2013
Сообщений: 5
16.12.2013, 15:58  [ТС]
ну я ввел n=120
оно должно было вывести [3,7,31], но вывело гораздо больше чисел
0
2742 / 2341 / 620
Регистрация: 19.03.2012
Сообщений: 8,830
16.12.2013, 16:32
Сори, что сразу не понял. Теперь все по ГОСТу
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#coding: utf-8
from math import sqrt
 
RANGE_PRIME_NUMBERS = 48
 
def prime_number():
    generated_number = [2]
    for i in xrange(3, RANGE_PRIME_NUMBERS + 1, 2):
        if i > 10 and i % 10 == 5:
            continue
        for j in generated_number:
            if j > int((sqrt(i)) + 1):
                generated_number.append(i)
                break
            if i % j == 0:
                break
        else:
            generated_number.append(i)
    return generated_number
 
 
if __name__ == '__main__':
    numbers = []
    temp = None
    n = input('Введите n: ')
    for i in prime_number():
        temp = 2 ** i - 1
        if temp < n:
            numbers.append(temp)
        else:
            break
    print(numbers)
1
0 / 0 / 0
Регистрация: 16.12.2013
Сообщений: 5
16.12.2013, 16:52  [ТС]
спасибо большое, все работает на УРА!)
но есть парочка вопросов
т.к. кодить на пайтоне начал вчера еще не все понимаю

вот это, что значит это число?
Цитата Сообщение от tsar925 Посмотреть сообщение
Python
1
RANGE_PRIME_NUMBERS = 48
и тут интересует значение первой строчки
и None, но на сколько я понял, то это просто темп ничему не равен
Цитата Сообщение от tsar925 Посмотреть сообщение
Python
1
2
3
if __name__ == '__main__':
      numbers = []
      temp = None
0
2742 / 2341 / 620
Регистрация: 19.03.2012
Сообщений: 8,830
16.12.2013, 18:14
Цитата Сообщение от PashaSakhanda Посмотреть сообщение
Python
1
RANGE_PRIME_NUMBERS = 48
Я тут задал сколько простых чисел будет генерироваться (то что-то типо константы, наверно так тебе будет более ясно).

Цитата Сообщение от PashaSakhanda Посмотреть сообщение
Python
1
if __name__ == '__main__':
Эта строчка проверяет главный или нет это модуль. Если этот модуль импортирует другой, то код ниже выполнен не будет.
На счёт
Python
1
temp = None
это я в спешке случайно написал, эта строка не нужна.
0
4866 / 3288 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
16.12.2013, 21:37
Цитата Сообщение от PashaSakhanda Посмотреть сообщение
Написать программу, которая выводит все числа Мерсенна от 1 до n.
есть число Мерсенна, а есть простое число Мерсенна

Цитата Сообщение от PashaSakhanda Посмотреть сообщение
Простое число називается числом Мерсенна, если его можно представить в виде (2^p)-1, где p — тоже простое число.
это простое число Мерсенна

числа Мерсенна:
1, 3, 7, 15, 31, 63, 127, 255, 511, 1023, 2047

простые числа Мерсенна:
3, 7, 31, 127, 2047
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
16.12.2013, 21:37
Помогаю со студенческими работами здесь

Найти все числа, меньшие числа Мерсенна
Вот само задание и его нужно написать на Java.Прошу его написать на более понятном языке используя for и массивы. Дано натуральное число...

Найти все числа меньшие числа Мерсенна
Дано натуральное число n. Найти все числа меньшие Мр числа Мерсенна. Число Мерсенна – это простое число, представленное в виде Mp=2p–1, ...

Найти все числа, меньшие числа Мерсенна
Дано натуральное число n. Найти все числа меньшие Мр числа Мерсенна. Число Мерсенна – это простое число, представленное в виде Mp=2p–1, ...

Найти все числа меньшие Мр числа Мерсенна
Дано натуральное число n. Найти все числа меньшие Мр числа Мерсенна. Число Мерсенна – это простое число, представленное в виде Mp=2p–1, ...

Найти все меньшие n числа Мерсенна
Дано натуральное число n. Найти все меньшие n числа Мерсена. (Простое число называется числом Мерсена, если оно может быть представлено в...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит переходные токи и напряжения на элементах схемы. . . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru