在Python3中从循环内部重置for循环的参数

时间:2011-03-27 19:29:59

标签: python-3.x

我正在研究Python 3中的项目euler问题,作为一种学习语言的有趣方式,我觉得我对第三个问题的解决方案有点时髦。问题是找到最大的素数因子600851475143,我以一种非常庞大的方式解决了它,如下所示:

#!/usr/local/bin/python3
# encoding: utf-8
# what is the largest prime factor of whatever the user types


def main():
    original = int(input("Input a number: "))
    if original == isPrime(original):
        print(original, "is prime")
    else:
        print(factor(original), "is the largest prime factor of", original)

def factor(number):
    nummy=2
    for num in range(nummy, number):
        if (number%num==0 and isPrime(num)==num):
            biggest=int(num)
            number=int(number/biggest)
            nummy = int(biggest+2)
            print("so far,",biggest, "is the biggest prime factor...")
            if number < biggest:
                break
    return biggest      

def isPrime(value):
    for num in range(2, int(value**0.5)+1):
        if value%num==0:
            return int(value/num)
    return value


if __name__ == "__main__": main()

正如你所看到的,在我的“factor”函数中,我试图在for循环中更新范围的上限,但它并没有像我期望的那样真正起作用所以我不得不添加if数字&lt ;最大的障碍是让整个事情在合理的时间内运行。

有没有办法从循环内部更新for循环的参数?

我很欣赏这方面的任何见解。

3 个答案:

答案 0 :(得分:1)

在您输入range(nummy, number)循环之前评估

for,因此在您的情况下是不可能的。

一般情况下,它可能在python中(尽管并非总是如此),但这是一个坏主意。最好检查变化的条件并像你一样突破循环。

答案 1 :(得分:1)

我认为这不会在合理的时间内运行。

我会指出一些事情,而不是给出解决方案:

你不需要尝试将X除以X之前的每个数字,以便知道它是素数。如果它不能被2整除,它也不能被4整除;如果不是3,那么减去9。你也可以早于(X-1)停止 - 毕竟,X不会被大于...的素数整除?

好吧,我还有3件物品,但他们都是从上面得到的。希望它能帮到你!

答案 2 :(得分:1)

正如S. Lott所说,你会想要使用while循环,但是你想要将范围的上限分配给变量,因为你希望它是可变的。

另外,我不确定你为什么这样做:

biggest=int(num)
number=int(number/biggest)
nummy = int(biggest+2)

num已经是一个int(否则,你将无法在该点之前进行数学运算)。整数除法也可以完成:

number = number // biggest