0 / 0 / 0
Регистрация: 01.06.2020
Сообщений: 1
1

Каков самый большой делитель числа 600851475143, являющийся простым числом?

01.06.2020, 22:50. Показов 19014. Ответов 15

Author24 — интернет-сервис помощи студентам
Простые делители числа 13195 - это 5, 7, 13 и 29.

Каков самый большой делитель числа 600851475143, являющийся простым числом?


Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
x = 0
num = 600851475143
sp = []
n = num
 
def pr(n):
   for x in range(2, n - 1):
       if not n % x == 0 or n == 1:
           return True
       else:
           return False
 
for i in range(1, num):
    if pr(i) == True and n % i == 0:
        sp.append(i)
        n = num / i
    if n == 1:
        break
 
print(max(sp))
Помогите понять, что заставляет программу работать бесконечно долго. Функцию создал, что бы понять простое число или нет. Цикл для перебора простых делителей числа. Не знаю что мешает программе работать корректно.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
01.06.2020, 22:50
Ответы с готовыми решениями:

Каков самый большой делитель числа 600851475143, являющийся простым числом?
Простые делители числа 13195 - это 5, 7, 13 и 29. Каков самый большой делитель числа...

Каков самый большой делитель числа 600851475143, являющийся простым числом
Простые делители числа 13195 - это 5, 7, 13 и 29. Каков самый большой делитель числа 600851475143,...

Каков самый большой делитель числа 600851475143, являющийся простым числом?
Товарищи, помогайте, потому что у меня сейчас случится дикий приступ. Вообщем, задача такая: Каков...

Самый большой делитель сложного числа, являющийся простым числом
Простые делители числа 13195 - это 5, 7, 13 и 29. Какой самый большой делитель числа...

Найти в данной последовательности число, которое имеет самый большой наибольший общий делитель с числом А
Дана последовательность из N натуральных чисел и натуральное число А. Найти в данной...

15
290 / 130 / 58
Регистрация: 24.11.2019
Сообщений: 532
02.06.2020, 00:10 2
Все работает, но очень медленно. Вам бы над алгоритмом поработать...

Добавлено через 1 минуту
Цитата Сообщение от Tamplier22 Посмотреть сообщение
for i in range(1, num):
for i in range(1, num+1):
0
4240 / 2937 / 687
Регистрация: 08.06.2007
Сообщений: 9,816
Записей в блоге: 4
02.06.2020, 01:22 3
Python
1
2
3
4
5
6
7
8
num = 600851475143
d = 2
while num != 1 and d*d <= num:
    if num % d == 0:
        num //= d
    else:
        d += 1
print(num)
Добавлено через 8 минут
Цитата Сообщение от palva Посмотреть сообщение
Python
1
while num != 1 and d*d <= num:
Здесь избыточное условие. Достаточно
Python
1
while d*d <= num:
0
307 / 288 / 116
Регистрация: 23.01.2018
Сообщений: 933
02.06.2020, 20:25 4
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
def divisors(n):
    yield 1
    i = 2
    while i**2 <= n:
        if n % i == 0:
            yield i
            j = n // i
            if j != i:
                yield j
        i += 1
 
def prime(n):
    if n < 2:
        return False
    if n % 2 == 0:
        return n == 2
    if n % 3 == 0:
        return n == 3
    i, s = 5, 2
    while i**2 <= n:
        if n % i == 0:
            return False
        i += s
        s = 4 if s == 2 else 2
    return True
 
print(max(i for i in divisors(600851475143) if prime(i)))
1
Модератор
Эксперт функциональных языков программированияЭксперт Python
36587 / 20317 / 4218
Регистрация: 12.02.2012
Сообщений: 33,616
Записей в блоге: 13
02.06.2020, 22:36 5
Лучший ответ Сообщение было отмечено mik-a-el как решение

Решение

Как вариант:

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
def isPrime(n):
    i=2
    while(i*i<=n):
        if n%i==0:
            return False
    return True
    
#n=600851475143   
    
def max_prime_div(n):
    k=3
    while(True):
        if n%k==0:
            r=n//k
            if isPrime(r):
                return r
        k+=2
 
print(max_prime_div(600851475143))
0
307 / 288 / 116
Регистрация: 23.01.2018
Сообщений: 933
03.06.2020, 05:42 6
Лучший ответ Сообщение было отмечено mik-a-el как решение

Решение

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
from math import sqrt
 
n = 600851475143
i = 2
 
while n % i != 0 or any(n // i % j == 0 for j in range(2, int(sqrt(n // i))+1)):
    if i == 2:
        i = 3
    elif i == 3:
        i = 5
    else:
        i += (9 - i % 6) // 2
 
print(n // i)
0
0 / 0 / 0
Регистрация: 03.09.2020
Сообщений: 1
03.09.2020, 00:39 7
Python 3.+

Python
1
2
3
4
5
6
7
8
9
 num = 600851475143
 d = 2
 while num != 1 and d*d <= num:
     if num % d == 0:
         num //= d
     else:
         d += 1
 print(num)
# Используется свойство числа , макс. делитель меньше или равен квадратному корню числа
0
0 / 0 / 0
Регистрация: 09.01.2022
Сообщений: 1
09.01.2022, 23:05 8
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
'''
    Делается с помощью 2 методов
    первый просто проверяет число на простату) 
    второй ищет самый больший делитель при условии что ]
    максимально допустимый делитель меньше или равен квадратному корню числа(с округлением)
    [given_number ** (0.5)]
 
'''
def prime_number(number: int):
    a = number
    k = 0
    for i in range(2, a // 2 + 1):
        if (a % i == 0):
            k = k + 1
    if (k <= 0):
        return True
 
def high_prime_number_division(given_number: int):
    list_num = []
    for element in range(2, given_number):
        if element <= round(given_number ** (0.5)):
            if given_number%element==0:
                if prime_number(element):
                    list_num.append(element)
        else:
            return list_num[-1]
 
print(high_prime_number_division(600851475143))
0
Status 418
Эксперт Python
4577 / 2344 / 602
Регистрация: 26.11.2017
Сообщений: 5,265
Записей в блоге: 3
10.01.2022, 11:30 9
Цитата Сообщение от Eldrion Посмотреть сообщение
проверяет число на простату
ага простАту
0
2677 / 1995 / 496
Регистрация: 17.02.2014
Сообщений: 9,357
10.01.2022, 12:34 10
Цитата Сообщение от Catstail Посмотреть сообщение
isPrime
???
Python
1
2
3
4
5
6
7
8
9
10
def is_prime(n):
    i = 2
    while i * i <= n:
        if n % i == 0:
            return False
    return True
 
 
for n in range(1, 55):
    print(str(n) + ' is prime ' + str(is_prime(n)))
0
Am I evil? Yes, I am!
Эксперт PythonЭксперт Java
17553 / 10310 / 2819
Регистрация: 21.10.2017
Сообщений: 22,366
10.01.2022, 13:56 11
Python
1
2
def isPrime(n):
   return bool(re.fullmatch(r'(11+?)\1+', '1' * n) )
3
3572 / 2173 / 570
Регистрация: 02.09.2015
Сообщений: 5,488
10.01.2022, 14:30 12
Python
1
print(6_857)
0
Модератор
Эксперт функциональных языков программированияЭксперт Python
36587 / 20317 / 4218
Регистрация: 12.02.2012
Сообщений: 33,616
Записей в блоге: 13
10.01.2022, 15:45 13
Aviz__, Вам верблюжье имя не понравилось?
0
Arsegg
10.01.2022, 15:47
  #14

Не по теме:

Catstail, полагаю смешение стилей в рамках одного сниппета.

0
2677 / 1995 / 496
Регистрация: 17.02.2014
Сообщений: 9,357
10.01.2022, 16:45 15
Цитата Сообщение от Catstail Посмотреть сообщение
Вам
мы же давно на "ты")). нет, если запустить, то не понятно, зачем твоему методу нужна i и while, если i не меняется.
1
Модератор
Эксперт функциональных языков программированияЭксперт Python
36587 / 20317 / 4218
Регистрация: 12.02.2012
Сообщений: 33,616
Записей в блоге: 13
10.01.2022, 20:18 16
Aviz__, ох, да... Это моя "архетипическая" ошибка в while-циклах...
0
10.01.2022, 20:18
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
10.01.2022, 20:18
Помогаю со студенческими работами здесь

Самый большой простой делитель числа
#include &lt;iostream&gt; using namespace std; void main() { setlocale(LC_ALL, &quot;Russian&quot;); ...

Даны действительные числа n m. Найти самый большой делитель этих чисел, используя алгоритм Евклида
Даны действительные числа n m. Найти самый большой делитель этих чисел, используя алгоритм Евклида.

Найти первый элемент являющийся простым числом и его индексы
Дан массив (4*3). Найти первый элемент являющийся простым числом и его индексы

Самый большой квадрат-делитель
Входные данные: Одно число N. 2 ≤ N ≤ 10^18. Выходные данные: Вывести самый большой делитель...

Заменить каждый элемент массива, не являющийся простым числом, его наибольшим делителем
Дан массив из N целых чисел, где N&lt;=16, каждое число в диапазоне от – 32000 до 32000. Заменить...


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

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru