刚接触 python ,作业题目要求打出输入个数的质数,格式按 10 个一行输出。我的思路是先表示出所有质数然后再按输入的个数打出质数。但我不知道如何表示所有质数。也许我的思路不对,请大家帮我看看呢,谢谢!
1
Zoeeeeecho OP |
2
Zoeeeeecho OP 第一张图是题目要求,第二张图是我的代码,第三张是 output
|
3
coderluan 2022-09-20 00:30:32 +08:00
思路错了,首先你写个函数 fun 判断数字是否是质数,然后 while 循环调用这个函数,参数从 1 开始递增,返回值是 true ,计数器+1 ,当计数器达到输入的要求,跳出循环。
|
4
hsfzxjy 2022-09-20 00:40:34 +08:00
|
5
luckycat 2022-09-20 00:43:19 +08:00
能找到素数公式的话,那可是牛逼了。
|
6
wudiiiii 2022-09-20 00:43:37 +08:00
首先得需要一个循环,在这个循环中不断运行函数 getBiggerPrime(x),循环结束的条件是已经得到了足够的质数。
|
7
Zoeeeeecho OP @hsfzxjy 天啦,太谢谢了,苯刚学 python 第一次发帖的人狠狠感动了
|
8
JohnBull 2022-09-20 01:10:29 +08:00
你咋不上天呢?
|
9
yaoyao1128 2022-09-20 01:11:03 +08:00 via iPhone
关键词:筛法求素数
|
10
yaoyao1128 2022-09-20 01:16:31 +08:00 via iPhone 1
oi 基础算法之一,优化方式有三点,一只算奇数,二只至平方根,三减少重复
|
11
xiri 2022-09-20 01:31:50 +08:00 via Android
你这不是不会 python 的问题,是完全没有一点数学常识啊,表示出所有素数,,,,
|
12
Zoeeeeecho OP @xiri 不不,我不是找规律找公式的意思,最开始是想 def 一个函数来判断所有数是否是质数而不是我输入数字来判断
|
13
xuanbg 2022-09-20 08:18:42 +08:00
@Zoeeeeecho 你这不是一样的么。。。输入数字的范围,通过循环一个个判断是否质数。是的话放到数组里面,完成后输出数组。
|
14
visper 2022-09-20 08:58:27 +08:00
这是数学家研究的问题. 你弄个循环判断一下一个函数是不是质数然后从 2 开始要多少个打多少个就行了.
|
15
em70 2022-09-20 10:38:39 +08:00
你先别管 python,现在就一张纸一支笔,你如何计算素数?如果你不知道,说明数学知识不过关,先研究数学上如何计算素数的(初中数学知识)
|
16
matthewzhong 2022-09-20 11:03:06 +08:00
|
17
krixaar 2022-09-20 11:08:08 +08:00 1
https://raw.githubusercontent.com/koorukuroo/Prime-Number-List/master/primes.json
这里面有一百万个,直接 json.load ,需要几个 print 几个,超过一百万 raise 个 error 就好,性能超棒的 |
18
MoYi123 2022-09-20 11:23:18 +08:00
def prime(n):
____memo = [1 for _ in range(n)] ____ret = [] ____for i in range(2, n): ________if memo[i]: ____________ret.append(i) ________j = 0 ________while j < len(ret) and i * ret[j] < n: ____________memo[i * ret[j]] = False ____________if i % ret[j] == 0: ________________break ____________j += 1 ____return ret 欧拉筛 |
19
haolongsun 2022-09-20 11:38:07 +08:00
埃式筛、欧拉筛,了解一下这些数论初级算法知识。
还有这种问题百度不更快? 题目也是惊呆了,所有质数,你这一辈子能打印出来,就不叫菲尔兹奖了,就该以你的名字命名了。 |
20
FYFX 2022-09-20 14:14:59 +08:00
你这个标题太吓人了,也算是 X-Y Problem 了,而且素数是无限个,这个欧几里得开始就有证明了,所以你没法表示所有的素数。不过你问题的解法就是楼上几位给出的素数筛,哦打表法也行
|
21
filwaline 2022-09-20 15:21:43 +08:00
|
22
filwaline 2022-09-20 15:26:32 +08:00
#21 上一条的 gist 的质数生成器绝对是正确的
唯一的问题是如果调用 next 取的质数太多,会触发递归太深错误(但是这是语言 /机器限制,不影响数学形式上正确) |
23
TimePPT 2022-09-20 16:45:07 +08:00
def get_prime_numbers(n: int = 50):
□□□□items = [] □□□□i = 2 □□□□while len(items) < n: □□□□□□□□if all(map(lambda x: i % x != 0, items)): □□□□□□□□□□□□items.append(i) □□□□□□□□i += 1 □□□□return items def print_items(m, items): □□□□start = 0 □□□□while start < len(items): □□□□□□□□print(items[start : start + m]) □□□□□□□□start += m print_items(m=10, items=get_prime_numbers(50)) |
24
julyclyde 2022-09-21 08:46:38 +08:00
其实你这个想法也没啥问题,挺自然的
直接 for 质数列表循环,每次输出一个,每 10 个换行 关键问题是“质数列表”怎么搞。这里你可以尝试用 generator 实现,搭配 memoize decorator 减少耗时 欧耶,可以一下子学到两个 python 特色功能了 |