Python学习_任务4_求100以内素数

固定区间,求区间内的素数:(没有用暴力遍历法)

# - Tutorial 4
# - 2020-2-3
# - Johan
# - 题目:
#   1、求100以内的所有素数

"""
包含的语法:
1、函数
2、lambda函数
3、filter函数
4、列表和list()
"""

import math


def func_get_prime(n):
    return list(filter(
        lambda x: not [x % i for i in range(2, int(math.sqrt(x)) + 1) if x % i == 0],
        range(2, n + 1))
    )


print(func_get_prime(100))

运行结果:

三个关键点:

1、def fun():是Python自定义函数的格式,换行后空4格开始是函数体,和其他语言一样可以用return返回各种值

2、lambda函数叫匿名函数或lambda表达式,本质上据说是表达式,能简化一些简单功能函数的格式,还能自定义表达式名以引用,比如以下例子,可以看到lambda表达式的一些用法:

add = lambda a, b : a + b
minus = lambda a, b : a - b
ADD = add

print(add(1, 2))
print(minus(1, 2))
print(ADD(2, 2))

运行结果:

3、filter函数用于根据条件过滤列表内容,和lambda表达式经常配合使用:

# filter(func, iterable)

# 判断x是否是11的倍数
def func(x):
    return x % 11 == 0


array = list(range(1, 100))
print(list(filter(lambda x : x % 17 == 0, array))) # lambda用于判断17的倍数
print(list(filter(func, array)))

运行结果:

 

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
好的,我可以帮你解决这个问题。下面是实现的代码: ```python import math from multiprocessing import Pool, cpu_count def is_prime(num): if num <= 1: return False for i in range(2, int(math.sqrt(num)) + 1): if num % i == 0: return False return True def is_palindrome(num): return str(num) == str(num)[::-1] def find_palindrome_primes(start, end): results = [] for num in range(start, end): if is_prime(num) and is_palindrome(num): results.append(num) return results if __name__ == '__main__': pool = Pool(cpu_count()) chunk_size = 100000 results = [] for i in range(0, 100000000, chunk_size): results.append(pool.apply_async(find_palindrome_primes, args=(i, i+chunk_size))) pool.close() pool.join() palindrome_primes = [] for res in results: palindrome_primes += res.get() print(palindrome_primes) ``` 这个程序使用了分布式计算的思想,将任务分成了若干个子任务,每个子任务使用一个独立的进程来处理。具体来说,程序将一亿个数分成了一百个块,每个块包含一百万个数字,然后使用 `multiprocessing.Pool` 来创建一个进程池,将每个块交给一个进程来处理,最后将所有进程的结果合并起来得到最终的结果。 在 `find_palindrome_primes` 函数中,我们首先判断一个数是否是质数,然后再判断该数是否是回文数。如果是回文质数,就将其加入到结果列表中。 我希望这段代码可以满足你的需,如果你还有其他问题,请继续问我。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值