鱼C论坛

 找回密码
 立即注册
查看: 1834|回复: 28

题目7:找出第10001个质数

[复制链接]
发表于 2023-5-22 04:00:45 | 显示全部楼层 |阅读模式

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

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

x
题目7:找出第10001个质数


10001st prime

By listing the first six prime numbers: 2, 3, 5, 7, 11, and 13, we can see that the 6th prime is 13.

What is the 10001st prime number?


题目翻译:

前六个质数是 2, 3, 5, 7, 11 和 13,其中第 6 个质数是 13。

那么第 10001 个质数是多少?


视频讲解:




思路解析及源码参考(C & Python):

游客,如果您要查看本帖隐藏内容请回复


评分

参与人数 1荣誉 +5 鱼币 +3 收起 理由
zhangjinxuan + 5 + 3 鱼C有你更精彩^_^

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-5-22 19:42:29 | 显示全部楼层
本帖最后由 zhangjinxuan 于 2023-5-22 19:53 编辑

优化

我们可以使用算法——欧拉筛,直接筛出质数。

这样的做法是 O(N) 的,会更快。
#include <bits/stdc++.h>
using namespace std;

int c[1000001], tot;
bool is[3000001];

int main() {
        for (int i = 2; tot <= 10001 && i <= 3000000; ++i) {
                if (!is[i]) c[++tot] = i;
                for (int j = 1; j <= tot && c[j] * i <= 3000000; ++j) {
                        is[c[j] * i] = 1;
                        if (i % c[j] == 0) break;
                }
        }
        printf("%d\n", c[10001]);
    return 0;
}


两者对比,欧拉筛做法比暴力判断快了 50 倍!

评分

参与人数 1荣誉 +5 鱼币 +5 贡献 +5 收起 理由
小甲鱼 + 5 + 5 + 5 棒棒,我再添加一下欧拉筛的解析~

查看全部评分

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

使用道具 举报

发表于 2023-5-23 07:17:10 From FishC Mobile | 显示全部楼层
正常循环判断素数并计数,计数10001时print并输出
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-5-27 14:39:59 | 显示全部楼层
1
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-5-29 00:56:21 | 显示全部楼层
11111
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-5-29 21:20:27 | 显示全部楼层
4545
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-6-2 14:09:05 | 显示全部楼层
good object , thanks
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-6-15 22:36:47 From FishC Mobile | 显示全部楼层
我来学习学习
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-6-16 01:29:25 From FishC Mobile | 显示全部楼层
111
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-6-19 13:42:29 | 显示全部楼层
import math

def isPrime(n):
    for i in range(2, math.isqrt(n)+1):
        if n % i == 0:
            return False
    return True

i = 1
n = 0
while True:
    i += 1
    if isPrime(i):
        # print(i)
        n += 1
    if n == 10001:
        print(i)
        break

# 答案是104743
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-7-3 07:04:10 | 显示全部楼层
def isprime(n):
    for i in range(2, int(n ** 0.5) + 1):
        if n % i == 0:
            return False
    return True

count = 0
i = 2
while count < 10001:
    if isprime(i):
        count += 1
    i += 1
print(i - 1)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-7-7 17:54:35 | 显示全部楼层
0
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-7-7 22:22:18 | 显示全部楼层
让我来康康优化版的答案
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-7-8 19:34:32 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-7-23 21:50:30 | 显示全部楼层
阿斯顿
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-7-25 19:14:48 | 显示全部楼层
1
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-8-1 16:35:01 | 显示全部楼层
1
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-8-15 18:16:10 | 显示全部楼层
源码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-8-18 15:06:12 | 显示全部楼层
OK
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-10-10 16:28:36 | 显示全部楼层
我来学习学习
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-21 20:59

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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