如何阻止这个快速分解程序打印超出第3个输出?

2024-06-13 12:45:59 发布

您现在位置:Python中文网/ 问答频道 /正文

在打印过程中,我对这个python37代码有一个问题,我希望它不要打印出因式分解输出中的素数。但是,我希望它只打印复合而不是超出循环的第三个打印语句。该程序对于大型复合材料的因式分解非常快,但对于大型素数则非常慢

例如,3种打印方式如下:

这三个因素是: 1. 三,

如果我输入2047,它的打印方式如下:

2047年的因素包括: 1. 23, 89, 2047年

但是,我只希望它显示到89。以下是代码:

    import math
    while True:
        def print_factors(x):
           print("The factors of",x,"are:")
           for i in range(1,x+1):
               if x % i == 0:
                   print(i)



        p = int(input('Enter a prime number and if the output is 1 and itself its prime: '))


        k = ((p**2*2))
        l = (((pow(2, k + 1, 2 * k) - 1) % (2 * k)))
        f = (k//2//p)
        print_factors(f)

Tags: and代码import程序if过程方式语句
1条回答
网友
1楼 · 发布于 2024-06-13 12:45:59

在python io论坛上,我在Gribouillis的帮助下解决了这个问题,但是Prime仍然打印,但是截止值低于第4个输出。您可以生成因子并切片迭代器

    import itertools as itt
    while True: 
        def gen_factors(x):
            for i in range(1, x + 1):
                if x % i == 0:
                    yield i

        def print_factors(x, maxcnt=None):
            g = gen_factors(x)
            if maxcnt is not None:
                g = itt.islice(g, 0, maxcnt)
            for p in g:
                print(p)
        p = int(input('Enter a prime number and if the output is 1 and itself 
        its prime: '))
        p = (2**p-1)
        k = ((p**2*2))
        f = (k//2//p)
        if __name__ == '__main__':
             print_factors(p, 3)

相关问题 更多 >