dixon alg added
parent
62138fab43
commit
8215a8a106
|
@ -1,3 +1,2 @@
|
|||
__pycache__
|
||||
var61.txt
|
||||
dixon.py
|
||||
var61.txt
|
|
@ -47,7 +47,7 @@ if __name__ == '__main__':
|
|||
N2 = 1191515026104746183243378937330489098579 # менее трех тысячных секунды
|
||||
N3 = 74048093444435937986114388960912781233885985702403356033834092312625704192350369 # не считается
|
||||
|
||||
number = N2
|
||||
number = N1
|
||||
|
||||
factors = rho_minus_1_pollard(number)
|
||||
print(f"Факторизация числа {number}: {factors}")
|
||||
|
|
|
@ -59,7 +59,7 @@ if __name__ == '__main__':
|
|||
N2 = 1191515026104746183243378937330489098579 # менее трех десятых секунд
|
||||
N3 = 74048093444435937986114388960912781233885985702403356033834092312625704192350369 # не считается
|
||||
|
||||
number = N2
|
||||
number = N1
|
||||
|
||||
factors = rho_minus_1_pollard(number)
|
||||
print(f"Первые 5 записей:")
|
||||
|
|
44
utils.py
44
utils.py
|
@ -1,4 +1,9 @@
|
|||
from collections import defaultdict
|
||||
|
||||
def is_prime(N):
|
||||
"""
|
||||
Тест Миллера-Рабина проверки числа на простоту.
|
||||
"""
|
||||
if N < 2:
|
||||
return False
|
||||
for p in [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31]:
|
||||
|
@ -19,6 +24,9 @@ def is_prime(N):
|
|||
return True
|
||||
|
||||
def primes(B):
|
||||
"""
|
||||
Возвращает список всех простых чисел до B.
|
||||
"""
|
||||
primes_list = []
|
||||
is_prime = [True] * (B + 1)
|
||||
is_prime[0] = is_prime[1] = False
|
||||
|
@ -27,4 +35,38 @@ def primes(B):
|
|||
primes_list.append(p)
|
||||
for i in range(p * p, B + 1, p):
|
||||
is_prime[i] = False
|
||||
return primes_list
|
||||
return primes_list
|
||||
|
||||
def first_primes(n):
|
||||
"""
|
||||
Возвращает список первых n простых чисел.
|
||||
"""
|
||||
primes_list = []
|
||||
candidate = 2
|
||||
while len(primes_list) < n:
|
||||
is_prime = True
|
||||
for p in primes_list:
|
||||
if p * p > candidate:
|
||||
break
|
||||
if candidate % p == 0:
|
||||
is_prime = False
|
||||
break
|
||||
if is_prime:
|
||||
primes_list.append(candidate)
|
||||
candidate += 1
|
||||
return primes_list
|
||||
|
||||
def is_smooth(n, base):
|
||||
"""
|
||||
Проверяет, является ли число гладким относительно factor_base
|
||||
"""
|
||||
if n == 0: return None
|
||||
fact = [0] * len(base)
|
||||
for i, p in enumerate(base):
|
||||
if n == 1: break
|
||||
while n % p == 0:
|
||||
n //= p
|
||||
fact[i] += 1
|
||||
if n != 1:
|
||||
return None
|
||||
return fact
|
Loading…
Reference in New Issue