对筛法求素数的实现代码(Python及C++)

本文介绍了使用对筛法求解素数的编程实现,分别提供了详细的Python和C++代码示例,帮助理解算法原理并进行实践。
摘要由CSDN通过智能技术生成

Python:

# -*- coding: utf-8 -*-
# 算法:对筛法
# 求素数

# 算法基本原理:
# 求n以内的素数,则将2到sqrt(n)的素数的倍数均除去,留下的即为素数
# 未优化,优化后可以进一步降低时间复杂度
# 时间复杂度 O(nlog(logn))
# 空间复杂度 O(n)

import math

limit = 10000000
flag = int(math.sqrt(limit))
L = [True for i in xrange(2, limit)]

def sieve(x):
    for i in xrange(x*x, limit - x, x):
        L[i] = False

def foo():
    map(sieve, xrange(2, flag, 1))

if __name__ == "__main__":
    import profile
    profile.run("foo()")

C++:

/*
 * 对筛法,求n以内的素数
 *
 * 算法基本思想:对2到n的数,筛去其中2到sqrt(n)的中素数
 * 的倍数,即可获得最终的素数
 *
 * 以下是C++语言实现代码
 * 未经过优化,时间空间效率较差
 * 
 * 可以的优化思路:bool数组可以使用无符号数字表示,其中
 * 每一个bit表示真假,可节省空间
*/
#include 
   
   
    
    
#include 
    
    
     
     

using namespace s
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值