简体   繁体   English

python 代码中用于查找素因子的语法错误。 如果有人可以帮助我,我将不胜感激

[英]Syntax error in python code to find Prime-factors. Id appreciate if someone could help me

I have been getting a syntax error with code which does prime-factorization我一直在使用进行素数分解的代码时遇到语法错误

The is this Code这是这个代码

from sys import argv
from os import system, get_terminal_size
from math import sqrt

number = int(argv[1])
width = get_terminal_size().columns
prime_numbers = []
prime_factors = []
_ = system('clear')
print() 

def is_prime(n):
    for i in range(2, n):
        if n % i == 0:
            return False

    return True

if is_prime(number):
    print(f"It is a prime number \nIts only factors are 1 and itself \n1, {number}")
    exit()

x = len(str(number))
for i in range(2, int(sqrt(number))):
    if is_prime(i):
            prime_numbers.append(i)

            #print(f"found ")
#print(prime_numbers)

i = 0
while True:
    if (number % prime_numbers[i] != 0):
        i += 1
        continue
    
    prime_factors.append(prime_numbers[i])
    print("%2d  | %3d".center(width) % (prime_numbers[i], number))
    print("_________".center(width))                                
    number /= prime_numbers[i]
    if number == 1:
        break
print("1".center(width))

print("Answer ")

i = len(prime_factors)
j = 1

for k in prime_factors:
    if j == i:
        print(k)
        break

    print(f"{k}", end=" X ")
    j += 1

This works for small numbers, less than 4 or 5 digits but gives an index error for bigger ones.这适用于小于 4 或 5 位的小数字,但对于较大的数字会产生索引错误。 If I remove the sqrt function on line 24 it starts taking too long.如果我在第 24 行删除 sqrt function ,它开始花费太长时间。

The errors look like this错误看起来像这样

Traceback (most recent call last):
  File "prime-factor.py", line 33, in <module>
    if (number % prime_numbers[i] != 0):
IndexError: list index out of range

real    0m0.049s
user    0m0.030s
sys 0m0.014s
(base) Souravs-MacBook-Pro-5:Fun-Math-Algorithms aahaans$ time python3 prime-factor.py 145647

I am unable to resolve this issue, Id appreciate it if you could help me.我无法解决此问题,如果您能帮助我,我将不胜感激。

No need to rebuild what's already available primePy无需重建已经可用的primePy

from primePy import primes
primes.factors(101463649)

output output

[7, 23, 73, 89, 97]

There are two basic issues with the code.代码有两个基本问题。 One with the for loop for prime numbers, you have to check until int(sqrt(number))+1.对于素数的 for 循环之一,您必须检查直到 int(sqrt(number))+1。 And, in the while loop after that, you have to break when the number is below sqrt of the original number, for which another variable should be used.并且,在那之后的while循环中,当数字低于原始数字的sqrt时,您必须中断,应该使用另一个变量。 The corrected code is:更正后的代码是:

from sys import argv
from os import system, get_terminal_size
from math import sqrt

number = int(argv[1])
width = get_terminal_size().columns
prime_numbers = []
prime_factors = []
_ = system('clear')
print() 

def is_prime(n):
  for i in range(2, n):
    if n % i == 0:
      return False

  return True

if is_prime(number):
  print(f"It is a prime number \nIts only factors are 1 and itself \n1, {number}")
  exit()

x = len(str(number))
limit = int(sqrt(number))
for i in range(2, limit+1):
  if is_prime(i):
    prime_numbers.append(i)

i = 0
while True:
  if i == len(prime_numbers)-1:
    # prime_factors.append(int(number))
    break
  if (number % prime_numbers[i] != 0):
    i += 1
    continue
  prime_factors.append(prime_numbers[i])
  print("%2d  | %3d".center(width) % (prime_numbers[i], number))
  print("_________".center(width))                                
  number /= prime_numbers[i]
prime_factors.append(int(number))
print("%2d  | %3d".center(width) % (number, number))
print("_________".center(width))
print("1".center(width))

print("Answer ")
i = len(prime_factors)
j = 1
for k in prime_factors:
  if j == i:
    print(k)
    break
  print(f"{k}", end=" X ")
  j += 1

If my explanation wasn't clear, look at the changes in the code.如果我的解释不清楚,请查看代码中的更改。

I wrote a small number factorization engine that can factor numbers.我写了一个可以分解数字的小数分解引擎。


import math

def LLL(N):
   p = 1<<N.bit_length()-1
   if N == 2:
     return 2
   if N == 3:
     return 3
   s = 4
   M = pow(p, 2) - 1
   for x in range (1, 100000):
     s = (((s * N ) - 2 )) % M
     xx = [math.gcd(s, N)] + [math.gcd(s*p+x,N) for x in range(7)] + [math.gcd(s*p-x,N) for x in range(1,7)] 
     try:
        prime = min(list(filter(lambda x: x not in set([1]),xx)))
     except:
        prime = 1
     if prime == 1:
        continue
     else:
        break
   #print (s, x, prime, xx)
   return prime

Factor:因素:

In [219]: LLL(10142789312725007)                                                                                                                                                       
Out[219]: 100711423

from https://stackoverflow.com/questions/4078902/cracking-short-rsa-keys

I also made Alpertons ECM SIQs engine work in python if you want factorization at that (over 60 digits level): https://github.com/oppressionslayer/primalitytest如果您想要在 python 中进行分解(超过 60 位级别),我还让 Alpertons ECM SIQs 引擎工作: https://github.com/oppressionslayer/primalitytest

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 python 机器学习 sklearn 代码 mosh Python 课程中的语法错误。 如果有人能帮助我,我将不胜感激 - Syntax error in python machine learning sklearn code mosh Python course. Id appreciate if someone could hep me 有人可以帮我找出这段代码中的错误吗? - Could someone help me find the error in this code? 有人可以帮我解决为什么会发生这种情况吗? Python无效语法错误 - Could someone please help me with why is this happening? Python invalid syntax error 有人可以帮我处理我的 Python 代码吗? - Could someone please help me with my Python code? 我的脚本没有检索列表项。 如果有人可以帮助我理解原因,我将不胜感激。 - My script is not retrieving an item for a list. I would appreciate it, if someone could help me understand why? 嗨,我尝试用 python 编写这段代码,但是我有一个错误,我希望有人可以帮助我 - Hi, I have tried to write this code in python, but i have a error, i hope that someone could help me 有人可以帮我将这段简短的代码片段翻译成python吗? - Could someone help me translate this short code snippet into python? Python找到主要因素 - Python find Prime Factors 有人可以帮我找到代码中错误源的解决方案吗? - Can someone help me find a solution to error source in my code? 有人可以帮我找到我的 python 程序中的错误吗? - Can someone help me find the error in my python program?
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM