楼主: JimmyzZZ

[闲聊灌水] @xiaomeng242

[复制链接]

0

技术

1

魅力

0

原创

略知一二

Rank: 3Rank: 3

积分
902
人气
25
分享
0
发表于 2022-8-9 16:05:20 | 显示全部楼层
skystars 发表于 2022-8-9 13:07
下次建议出个计算量较大的题,普通算法1ms就算出来了
[mw_shl_code=cpp,true]#include
#include

你计算一下10000000以内所有的素数吧

看看需要多长时间

1

技术

14

魅力

1

原创

退休版主

Rank: 8Rank: 8

积分
8190
人气
416
分享
59

论坛元老活跃会员灌水之王荣誉管理

 楼主| 发表于 2022-8-9 16:26:07 | 显示全部楼层
xiaomeng242 发表于 2022-8-9 16:05
你计算一下10000000以内所有的素数吧

看看需要多长时间

其实可以试试10000000000000000000000000000000000000000000000000以内的

0

技术

1

魅力

0

原创

略知一二

Rank: 3Rank: 3

积分
902
人气
25
分享
0
发表于 2022-8-9 16:44:57 | 显示全部楼层
本帖最后由 xiaomeng242 于 2022-8-9 16:47 编辑

@skystars 我用numpy计算需要用 3-6ms,如果是纯python计算的话需要大约1000ms,而且代码量也不过10多行(去掉print和注释)
代码:
[Python] 纯文本查看 复制代码
import time
import numpy as np
start_time = time.time()
# 埃拉托斯特尼筛法:必须把不大于100开根号(即10)以内的所有质数的倍数剔除。
a = np.arange(1, 10000)
n_max = int(np.sqrt(len(a)))
is_prime = np.ones(len(a), dtype=bool)  # 创建100个元素的数组,用来标记是否为质数
is_prime[0] = False
for i in range(2, n_max):
    if i in a[is_prime]:  # 跳过非质数
        is_prime[(i ** 2 - 1)::i] = False  # 减一是为了修复从0开始索引的问题
print(a[is_prime])
end_time = time.time()
print("time cost:", float(end_time - start_time) * 1000.0, "ms")

本帖子中包含更多资源

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

x

1

技术

7

魅力

2

原创

管理员

Rank: 9Rank: 9Rank: 9

积分
6929
人气
211
分享
49

灌水之王论坛元老优秀版主活跃会员

发表于 2022-8-9 22:11:36 | 显示全部楼层
JimmyzZZ 发表于 2022-8-9 16:26
其实可以试试10000000000000000000000000000000000000000000000000以内的

1.打印出该范围内所有素数
2.手动找出该范围内最大素数记作m
3.打开devc++,输入std::cout<<m<<endl;
论坛事务联系邮箱 henry217@x64bbs.cn

0

技术

1

魅力

0

原创

略知一二

Rank: 3Rank: 3

积分
902
人气
25
分享
0
发表于 2022-8-9 23:15:41 | 显示全部楼层
henry217 发表于 2022-8-9 22:11
1.打印出该范围内所有素数
2.手动找出该范围内最大素数记作m
3.打开devc++,输入std::cout ...

你可真是人工智能,真"人工"

0

技术

1

魅力

0

原创

略知一二

Rank: 3Rank: 3

积分
902
人气
25
分享
0
发表于 2022-8-9 23:16:10 | 显示全部楼层
henry217 发表于 2022-8-9 22:11
1.打印出该范围内所有素数
2.手动找出该范围内最大素数记作m
3.打开devc++,输入std::cout ...

话说,你不写写玩玩?

0

技术

7

魅力

1

原创

网站编辑

我最可铐

Rank: 8Rank: 8

积分
6884
人气
217
分享
594

最佳新人活跃会员

发表于 2022-8-11 12:15:05 | 显示全部楼层
xiaomeng242 发表于 2022-8-9 08:27
@henry217 @skystars @JimmyzZZ @explore

题目:(PrimeNumber)计算出1~10000内最大的素数。计算方法不 ...

原谅,今天才看见题目

[Python] 纯文本查看 复制代码
#计时器是这样做吗,懒得翻文档了,在CSDN上找的/汗-_-||/
############################ToDo:Debug计时器部分
#才发现explore是一个算法上的半吊子...

import time as t
time_Start=t.time()#开始计时


num = []  #质数list

for i in range(1229-1):#在线编译TimeOut(算法太复杂),但是应该没有问题
#explore偷了个懒,因为1w以内有1229个质数。。。
    k = 0
    for j in range(1, i+1):
        if i % j == 0:
            k += 1
    if k == 2:
        num.append(i)

time_End=t.time()#结束计时
time_cost=time_End-time_Start

print(time_cost)
print(num[-1])

0

技术

7

魅力

1

原创

网站编辑

我最可铐

Rank: 8Rank: 8

积分
6884
人气
217
分享
594

最佳新人活跃会员

发表于 2022-8-11 12:18:16 | 显示全部楼层
JimmyzZZ 发表于 2022-8-9 16:26
其实可以试试10000000000000000000000000000000000000000000000000以内的

科学计数法安排上,数不清了

0

技术

1

魅力

0

原创

略知一二

Rank: 3Rank: 3

积分
902
人气
25
分享
0
发表于 2022-8-11 22:52:39 | 显示全部楼层
explore 发表于 2022-8-11 12:18
科学计数法安排上,数不清了

所以,你运行完之后时间是多少?@explore

0

技术

1

魅力

0

原创

略知一二

Rank: 3Rank: 3

积分
902
人气
25
分享
0
发表于 2022-8-11 22:53:55 | 显示全部楼层
explore 发表于 2022-8-11 12:15
原谅,今天才看见题目

[mw_shl_code=python,true]#计时器是这样做吗,懒得翻文档了,在CSDN上找的/汗-_- ...

你这个程序确实挺偷懒的,你怎么知道1w以内有1229个质数?
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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