当前位置: 首页 > wzjs >正文

网站开发实训周志抚州城乡建设厅网站

网站开发实训周志,抚州城乡建设厅网站,良品铺子网络营销策划书,乐都企业网站建设哪家好题记: 最近自学Python,出于好奇,想从1~100000000共1亿个数中找出所有质数个数,用欧拉筛和埃氏筛两种方法筛选质数,让大家看看在Python中原生方法与使用第三方库的效率对比,这差异是不是也太大了点&…
题记:        

        最近自学Python,出于好奇,想从1~100000000共1亿个数中找出所有质数个数,用欧拉筛和埃氏筛两种方法筛选质数,让大家看看在Python中原生方法与使用第三方库的效率对比,这差异是不是也太大了点?另外在Python中,欧拉筛怎么还比不过埃氏筛?在C++中可不是这样啊?!

测试源代码:

import numpy as np
from numba import njit
import timen=100_000_000  #测试1亿个数def euler_sieve(n):"""使用欧拉筛法找出小于等于n的所有质数(原生方法)"""if n < 2:return []is_prime = [True] * (n + 1)  # 初始化素数标记数组primes = []                  # 存储所有质数for i in range(2, n + 1):if is_prime[i]:primes.append(i)for p in primes:   # 遍历当前已找到的质数,筛除 i * pm = i *pif m > n:breakis_prime[m] = Falseif i % p == 0:break  # 确保每个合数只被其最小质因子筛一次return primes@njit #利用@njit 提升性能!
def euler_sieve_njit(n):"""直接操作NumPy数组,Numba@njit优化的欧拉筛法"""if n < 2:return np.zeros(0, dtype=np.int64)is_prime = np.ones(n + 1, dtype=np.bool_)is_prime[0] = is_prime[1] = Falseprimes = np.zeros(n, dtype=np.int64)  # 预分配足够大的数组count = 0for i in range(2, n + 1):if is_prime[i]:primes[count] = icount += 1j = 0while j < count:p = primes[j]m = i * pif m > n:breakis_prime[m] = Falseif i % p == 0:breakj += 1return primes[:count]  # 只返回有效部分def sieve_eratosthenes(n):"""使用埃拉托斯特尼筛法找出小于等于n的所有质数(原生方法)"""if n < 2:return []is_prime = [True] * (n + 1)is_prime[0] = is_prime[1] = False  # 0 和 1 不是质数for i in range(2, int(n ** 0.5) + 1):if is_prime[i]:
#             将 i 的所有倍数标记为非质数(切片赋值内存溢出使用)
#             for j in range(i * i, n + 1, i):
#                 is_prime[j] = False                # 利用切片赋值比循环效率更高!但数值太大(超过1亿)会内存溢出错误is_prime[i*i::i] = [False] * ((n - i*i) // i + 1)# 收集所有质数primes = [i for i, prime in enumerate(is_prime) if prime]return primesdef sieve_eratosthenes_numpy(n):"""NumPy优化的埃拉托斯特尼筛法"""if n < 2:return np.zeros(0, dtype=np.int64)  # 返回空数组is_prime = np.ones(n + 1, dtype=np.bool_)is_prime[0:2] = False  # 0和1不是质数for i in range(2, int(np.sqrt(n)) + 1):if is_prime[i]:is_prime[i*i::i] = False  # 标记所有i的倍数,NumPy会自动广播return np.nonzero(is_prime)[0]  # 两者功能一类似
#     return np.where(is_prime)[0]   # 获取所有为 True 的索引"""==============测试============="""
start = time.time()
primes = euler_sieve(n)
end = time.time()
print(f"欧拉筛法 | 耗时: {end - start:.2f}s | 质数数量: {len(primes)}")start = time.time()
primes = euler_sieve_njit(n)
end = time.time()
print(f"欧拉筛法-优化 | 耗时: {end - start:.2f}s | 质数数量: {len(primes)}")start = time.time()
primes = sieve_eratosthenes(n)
end = time.time()
print(f"埃氏筛法 | 耗时: {end - start:.2f}s | 质数数量: {len(primes)}")start = time.time()
primes = sieve_eratosthenes_numpy(n)
end = time.time()
print(f"埃氏筛法-优化 | 耗时: {end - start:.2f}s | 质数数量: {len(primes)}")

输出结果:

这结果是不是匪夷所思?优化前后相关10倍!而且欧拉筛法总体性能较差,与Python系统有关吗?

http://www.dtcms.com/wzjs/598499.html

相关文章:

  • 做网站的叫云啥工作室网站建设的意义
  • 肥乡企业做网站推广安庆网络推广和竞价
  • 外贸管理系统源码龙岗网站优化
  • 做国外有那些网站比较好专业的网页设计流程
  • 现在有专业做海鲜的网站没有无锡正规网站seo公司
  • 微商城网站建设资讯企业商城网站多少钱
  • 改则网站建设wordpress多站点子目录建站
  • 营销网站建设评估及分析pc网站建设需要提供哪些资料
  • idc网站模版自动建立wordpress
  • 长沙市建设局官方网站广州创建网站
  • 清溪镇做网站网站空间计算
  • 外贸网站平台下载wordpress+简码使用
  • 湖南网站建设熊掌号企业怎样做好网站建设
  • 做的网站修改编码徐州网站建设大前端
  • php 微网站开发wordpress的小程序
  • 网页设计教程网站怎么推广自己的链接
  • 做视频的网站那几个盈利了安徽省建设网站
  • 建设工程施工合同网站做板子焊接的网站的公司名字
  • 变更网站怎么做厦门站长优化工具
  • 建站网址怎么改深圳企业500强名单
  • 网络公司手机网站模板中山技术支持中山网站建设
  • 企业网站建设公司怎么做个人域名备案麻烦吗
  • 网站建设遇到的问题及对策嘉兴做微网站
  • 网站开发合同的付款方式营销型网站建设哪家专业
  • 手机小说网站建设wordpress防sql注入
  • 网站备案在哪个部门手机网站违规禁止访问怎么办
  • 集团公司网站欣赏做网站优势
  • 做一个企业网站要多久自己做开箱网站
  • 做快手头像的网站百度竞价什么时候开始的
  • 怎样建立门户网站简单制作html静态网页