社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

如何解决Python中大数问题的函数?

Simurg1866 • 3 年前 • 1212 次点击  

我想找出600851475143的因素。我的代码坏了。

def factor(a):
factor = []
for i in range (1, a+1):
    if(a%i==0):
        factor.append(i)

print(factor)
factor.clear()

系数(600851475143)

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/132393
 
1212 次点击  
文章 [ 4 ]  |  最新文章 3 年前
Alain T.
Reply   •   1 楼
Alain T.    3 年前

函数应该返回因子列表(而不是打印)。因为你要计算从1到1的所有潜在因子 a ,需要很长时间才能产生一个非常大的结果,比如600851475143。

为了加快运算速度,您可以成对提取因子,这样您只需查看整数平方根以下的除数。每次你找到数字(N)的一个因子(f),你就知道有一个对应的因子,它是N除以f(N/f)的结果。这意味着每个因素<=N有一个对应的>=N所以你可以让它们成对出现,只检查除数<=N

def factors(N):
    return [f for d in range(1,int(N**0.5)+1) if N%d==0 for f in {d,N//d}]

输出:

print(factor(600851475143))
[1, 600851475143, 8462696833, 71, 716151937, 839, 408464633, 1471, 
 6857, 87625999, 59569, 10086647, 104441, 5753023, 1234169, 486847]
user17083192 user17083192
Reply   •   2 楼
user17083192 user17083192    3 年前

首先,压痕不正确。必须正确缩进函数的内部代码。它应该包含在定义语句中。接下来,您要在函数外部打印因子列表,它是一个局部变量,而不是全局变量。如果要打印,请在函数中添加一条打印语句,然后调用函数。您更正的代码:

def factor(a):
    factor_1= []
    for i in range (1, a+1):
        if(a%i==0):
            factor_1.append(i)
    print(factor_1)

factor(600851475143)

另外,不要保持函数名和列表名相同。这可能会出错

riquefr
Reply   •   3 楼
riquefr    3 年前

您的代码有一些问题,首先,python中的if语句没有使用 () ,应该只是 if a%i == 0: .您的代码缩进不正确,函数下面的代码不是它的一部分。您创建了一个与函数名同名的全局变量,它们会相互覆盖。
如果要完成此功能,请执行以下操作:

factorlist = []
  
  
def factor(a):
    for i in range(1, a + 1):
        if a % i == 0:
            factorlist.append(i)
  
  
factor(input("Fators of: "))
print(factorlist)
factorlist.clear()

如果要返回结束列表,请使用@Ratery的代码。

Ratery
Reply   •   4 楼
Ratery    3 年前

你可以用 return 关键字返回一个因素列表。

def factor(a):
    factor = []
    for i in range (1, a + 1):
        if a % i == 0:
            factor.append(i)
    return factor

print(factor(int(input())))