鱼C论坛

 找回密码
 立即注册
查看: 1641|回复: 9

[已解决]求大佬帮忙 质数问题

[复制链接]
发表于 2020-11-23 20:30:44 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
对于标准输入中的每一行,给定一个正整数,您需要输出不超过标准输出的质数的个数。
当输入文本为空时,程序必须完成。
在这个问题中,请不要使用(Eratosthenes’s)筛算法。
另外要求输入形式为
2
10
100
1000
这样允许跨行输入
最佳答案
2020-11-23 22:20:48
num = 'x'
ques_list = []
ans_list = []
while num != '':
    while not num.isdigit():
        num = input('请输入一个整数:')
        if num == '':
            break
    if num == '':
        break
    ques_list.append(int(num))
    num = 'x'
for each in ques_list:
    if each == 2:
        ans_list.append(1)

    elif each == 3:
        ans_list.append(2)
    else:
        each_list = []
        for n in range(2, each+1):
            if n == 2:
                each_list.append(n)
                continue
            i = 1
            while i ^ 2 < n:
                i += 1
                if (n % i) == 0:
                    break
                if i ^ 2 >= n:
                    each_list.append(n)
        ans_list.append(len(each_list)+1)
for i in ans_list:
    print(i)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-11-23 21:16:10 | 显示全部楼层
对你的题目有点不理解,要不举个列子?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-11-23 21:24:41 | 显示全部楼层
        是输入一个整数,输出不大于这个数的所有质数?还是输入很多整数,挑出里面的质数?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-11-23 21:48:01 | 显示全部楼层
本帖最后由 Tac 于 2020-11-23 21:52 编辑
小伤口 发表于 2020-11-23 21:16
对你的题目有点不理解,要不举个列子?


是输入一个数字,输出不大于这个数的质数的个数
比如输入10,10以下质数为2,3,5,7一共四个,输出为4
上面
2
10
100
1000的输出就是

1
4
25
168
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-11-23 21:48:31 | 显示全部楼层
本帖最后由 Tac 于 2020-11-23 21:52 编辑
jackz007 发表于 2020-11-23 21:24
是输入一个整数,输出不大于这个数的所有质数?还是输入很多整数,挑出里面的质数?


是输入一个数字,输出不大于这个数的质数的个数
比如输入10,10以下质数为2,3,5,7一共四个,输出为4
上面
2
10
100
1000的输出就是

1
4
25
168
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-11-23 22:17:07 | 显示全部楼层
import math

def prime(n):
    r = False
    if n > 1:
        r = True
        for k in range(2 , int(math . sqrt(n)) + 1) :
            if k < n and n % k == 0:
                r = 0
                break
    return r

s = input() . strip()
if s:
    d = 0
    for k in range(2 , int(s) + 1) :
        if prime(k) : d += 1
print(d) 
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-11-23 22:20:16 | 显示全部楼层
我好像写的有点蠢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-11-23 22:20:48 | 显示全部楼层    本楼为最佳答案   
num = 'x'
ques_list = []
ans_list = []
while num != '':
    while not num.isdigit():
        num = input('请输入一个整数:')
        if num == '':
            break
    if num == '':
        break
    ques_list.append(int(num))
    num = 'x'
for each in ques_list:
    if each == 2:
        ans_list.append(1)

    elif each == 3:
        ans_list.append(2)
    else:
        each_list = []
        for n in range(2, each+1):
            if n == 2:
                each_list.append(n)
                continue
            i = 1
            while i ^ 2 < n:
                i += 1
                if (n % i) == 0:
                    break
                if i ^ 2 >= n:
                    each_list.append(n)
        ans_list.append(len(each_list)+1)
for i in ans_list:
    print(i)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-11-23 22:22:09 | 显示全部楼层

可以改一下成允许输入为
2
10
100
1000
这种形式的吗?
因为我输入的时候好像只能一个数一个数这样输入不能跨行输入
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-11-23 22:34:39 | 显示全部楼层

能解决问题就好,你这个正好符合我的要求
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-17 13:59

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表