【蓝桥杯】【python】Torry的困惑(基本型)

问题描述

Torry从小喜爱数学。一天,老师告诉他,像2、3、5、7……这样的数叫做质数。Torry突然想到一个问题,前10、100、1000、10000……个质数的乘积是多少呢?他把这个问题告诉老师。老师愣住了,一时回答不出来。于是Torry求助于会编程的你,请你算出前n个质数的乘积。不过,考虑到你才接触编程不久,Torry只要你算出这个数模上50000的值。

输入一个数n,表示前几个质数,然后输出前n个质数乘积对50000的模

最初思路

最初准备首先定义一个函数,用于判断是否是质数,然后在主函数中循环,如果是的话相乘,并且计数+1,直到最后达到期望值。

import sys

def handlerNum(num):
    # 质数大于 1
    if num > 1:
        # 查看是否有其他因子
        for i in range(2, num//2+1):
            if (num % i) == 0:
                return 0
                break
        else:
            return 1

    # 如果输入的数字小于或等于 1,不是质数
    else:
        return 0

n = int(input())
re = 0
temp = 1
for i in range(100000000000000000):
    if(handlerNum(i + 1) == 1):
        temp = temp * (i + 1)
        re = re + 1
        if(re == n):
            print(temp % 50000)
            sys.exit
    else:
        continue

经过自己的测定,答案是对的,但是会超时,于是尝试换种思路。

优化思路

将对是否等于n的判断用while的形式放在最初进行判断

def getPrime(n): # 找到前n个质数
        lists = []
        count = 0
        number = 2
        while count != n:
            for i in range(2, number):
                if(number % i == 0):
                    break
            else:
                lists.append(number)
                count += 1
            number += 1
        return lists

def main():
    n = int(input())
    lists = getPrime(n)
    result = lists[0]
    for item in lists[1:]:
        result *= item
    print(result % 50000) # 取模运算

main()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值