Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 非素数只包含2,3,5,7个优化_Python_Python 3.x_Algorithm_Performance_Primes - Fatal编程技术网

Python 非素数只包含2,3,5,7个优化

Python 非素数只包含2,3,5,7个优化,python,python-3.x,algorithm,performance,primes,Python,Python 3.x,Algorithm,Performance,Primes,任务是: 给出了两个正整数a和b(b-a一些快速求解的建议 生成一个数组arr,其中数字只有这些数字{2,3,5,7} 使用预先计算的数组is_prime使用速度更快的筛子 仅使用arr中的有效值(非素数)生成新数组 在第三步中生成的新数组中使用二进制搜索,使用a和b作为计数 正如@ArjunSingh所建议的,首先创建一个只包含数字{2,3,5,7}的数组,它还只返回[a,b]范围内的数字 def interval(a, b): values = {0: [2,3,5,7]}

任务是:


给出了两个正整数a和b(b-a一些快速求解的建议

  • 生成一个数组
    arr
    ,其中数字只有这些数字{2,3,5,7}
  • 使用预先计算的数组
    is_prime
    使用速度更快的筛子
  • 仅使用
    arr
    中的有效值(非素数)生成新数组

  • 在第三步中生成的新数组中使用二进制搜索,使用a和b作为计数


  • 正如@ArjunSingh所建议的,首先创建一个只包含数字{2,3,5,7}的数组,它还只返回[a,b]范围内的数字

    def interval(a, b):
        values = {0: [2,3,5,7]}
        magnitude = 1
        for r in range(1,10):
            magnitude *= 10
            values[r] = []
            for digit in values[0]:
                for value in values[r-1]:
                    n = digit*magnitude + value
                    if n <= b:
                        values[r].append(n)
                        continue
                    return [v for r1 in range(1,r+1) for v in values[r1] if v >= a]
        return None    # b is outside of the range 10**10
    
    现在我们得到区间中的值,只打印那些不是素数的值

    a = 220000
    b = 240000
    for i in interval(a,b):
        if not is_prime(i):
            print(i)
    

    你说的缩进是什么?哎呀,是的,没有缩进你可以更快地找到特定范围内的所有素数奇怪的是a和b是@jdehesa,实际上目标是找到所有的非素数,所以我们应该在最终结果列表中包括2或5的素数,但是跳过这些数的素数测试
    def is_prime(n):
        if n % 10 in [2,5]:
            return False
        return all(n % i for i in range(3, int(n ** 0.5) + 1, 2))
    
    a = 220000
    b = 240000
    for i in interval(a,b):
        if not is_prime(i):
            print(i)