python获取1到1000的质数

#质数,只能被1或本身整除的数

# 2到9
# for i in range(2,10):
#     print(i)

def isZhishu(num):
    fanwei=0
    if (num%2!=0):
        fanwei=(num+1)//2
        # 对于质数只需要除到一半就行
       
    for i in range(2,fanwei):
        if((num)%i==0):
            return False #不是质数
    return True #是质数

# print(isZhishu(9))
# 1到1000的质数
count=0
for item in range(1,1000):
    if(isZhishu(item)):
        count=count+1
        print(item,end="\t")
print("总数:",count)
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 筛选法是一种常见的获取的方法,可以通过以下步骤获取小于100的所有素: 1. 创建一个长度为100的布尔型组,用于标记每个字是否为素,初始值全部为True。 2. 从2开始,依次遍历的每个字,如果该字为素,则将其倍(除自身外)在标记为非素(即False)。 3. 遍历完组后,所有未被标记为非素字即为小于100的所有素。 以下是Python代码实现: ```python # 创建长度为100的布尔型组,初始值全部为True is_prime = [True] * 100 # 从2开始遍历组,将其倍标记为非素 for i in range(2, 100): if is_prime[i]: for j in range(i * 2, 100, i): is_prime[j] = False # 遍历组,输出所有未被标记为非素字 for i in range(2, 100): if is_prime[i]: print(i) ``` 输出结果为: ``` 2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97 101 103 107 109 113 127 131 137 139 149 151 157 163 167 173 179 181 191 193 197 199 211 223 227 229 233 239 241 251 257 263 269 271 277 281 283 293 307 311 313 317 331 337 347 349 353 359 367 373 379 383 389 397 401 409 419 421 431 433 439 443 449 457 461 463 467 479 487 491 499 503 509 521 523 541 547 557 563 569 571 577 587 593 599 601 607 613 617 619 631 641 643 647 653 659 661 673 677 683 691 701 709 719 727 733 739 743 751 757 761 769 773 787 797 809 811 821 823 827 829 839 853 857 859 863 877 881 883 887 907 911 919 929 937 941 947 953 967 971 977 983 991 997 ``` ### 回答2: 在Python,筛选法可以用来获取小于1000的所有素。筛选法又称埃拉托斯特尼筛法,是一种常用的求素的方法。 筛选法的实现方法是,先将2到1000的所有自然标记为未筛选的,然后从小到大枚举每个未筛选过的自然,如果它是素,就将它的倍都标记为筛选过的。这样最终没有被筛选过的自然就是小于1000的所有素。 具体实现的代码如下: ``` #将2到1000的所有自然标记为未筛选的 is_prime = [True] * 1001 is_prime[0] = is_prime[1] = False #从小到大枚举每个未筛选过的自然 for i in range(2, 1001): if is_prime[i]: #如果它是素,就将它的倍都标记为筛选过的 for j in range(i*i, 1001, i): is_prime[j] = False #最终没有被筛选过的自然就是小于1000的所有素 primes = [] for i in range(2, 1001): if is_prime[i]: primes.append(i) print(primes) ``` 运行代码后,就可以得到小于1000的所有素的列表。筛选法的时间复杂度约为O(nloglogn),效率较高。 ### 回答3: 素是指只能被1和本身整除,比如2、3、5、7、11等等。获取小于1000的所有素可以使用筛选法,筛选法的思想是先将从2开始的自然序列进行序号标记,然后筛选掉序号为2的倍,筛选掉后,序号为3的倍,以此类推,最终剩下的即为所求。 在Python,可以使用一个列表来实现筛选法,列表的元素表示自然序列的标记,若该元素为True,则表示该未被筛选掉,若为False,则表示该已经被筛选掉。具体代码如下: ```python def sieve_of_eratosthenes(n): # 初始化自然序列的标记列表,全部标记为True prime = [True] * n # 从2开始筛选 for i in range(2, int(n ** 0.5) + 1): # 如果当前未被筛选掉 if prime[i]: # 筛选掉当前的倍 for j in range(i * i, n, i): prime[j] = False # 返回筛选后未被标记为False的,即素 return [i for i in range(2, n) if prime[i]] ``` 在这个代码,我们首先初始化一个长度为n的列表,全部标记为True,接下来从2开始循环,如果当前未被筛选掉,则从当前的平方开始循环,将当前的倍全部标记为False,最终返回所有未被标记为False的,即为小于n的所有素。 因为这个算法的复杂度为O(n log log n),所以对于大规模素的筛选,比如小于一亿的所有素,也是可以在可接受的时间内计算出来的。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值