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