找回密码
 快速注册
搜索
查看: 771|回复: 15

共有28种方法表一千为两素数之和

[复制链接]

471

主题

945

回帖

9837

积分

积分
9837

显示全部楼层

青青子衿 发表于 2020-9-23 18:50 |阅读模式
本帖最后由 青青子衿 于 2020-9-23 19:30 编辑 Select[IntegerPartitions[1000, 2], And @@ PrimeQ@# &] // Length
IntegerPartitions[1000, 2, Prime[Range[PrimePi[1000]]]] // Length

9

主题

348

回帖

2806

积分

积分
2806

显示全部楼层

睡神 发表于 2024-3-12 23:05
本帖最后由 睡神 于 2024-3-13 21:18 编辑 找到一个效率更高的代码
pr[n_]:=DeleteCases[If[PrimeQ[#] && PrimeQ[n-#], {#,n-#},0] & /@Range[3, IntegerPart[n/2], 2], 0]
m = 1000000;
Length[pr[m]]
运行时间:约1秒半钟
而楼上的运行时间需要约16分钟
除了不懂,就是装懂

3149

主题

8386

回帖

6万

积分

$\style{scale:11;fill:#eff}꩜$

积分
65391
QQ

显示全部楼层

hbghlyj 发表于 2024-3-13 17:42
  1. pr[n_]:=Select[Range[3,Floor[n/2],2],PrimeQ[#]&&PrimeQ[n-#]&];
  2. m=1000000;
  3. Length[pr[m]]
复制代码

Out[]= 5402

9

主题

348

回帖

2806

积分

积分
2806

显示全部楼层

睡神 发表于 2024-3-13 21:17
hbghlyj 发表于 2024-3-13 17:42
Compile

https://reference.wolfram.com/language/ref/ParallelMap.html

是不是哪里出错了?
图片1.png

点评

什么情况?运行了半个多小时,还在运算中。。。  发表于 2024-3-13 21:34
除了不懂,就是装懂

3149

主题

8386

回帖

6万

积分

$\style{scale:11;fill:#eff}꩜$

积分
65391
QQ

显示全部楼层

hbghlyj 发表于 2024-3-13 21:58
睡神 发表于 2024-3-13 13:17
是不是哪里出错了?

抱歉,我的意思是用ParallelMap替换/@,我的代码错误,已更正

9

主题

348

回帖

2806

积分

积分
2806

显示全部楼层

睡神 发表于 2024-3-13 22:01
hbghlyj 发表于 2024-3-13 21:58
抱歉,我的意思是用ParallelMap替换/@,我的代码错误,已更正

😂😂😂
一个钟了,还在运算,我只能重启电脑了...
除了不懂,就是装懂

3149

主题

8386

回帖

6万

积分

$\style{scale:11;fill:#eff}꩜$

积分
65391
QQ

显示全部楼层

hbghlyj 发表于 2024-3-13 22:07
hbghlyj 发表于 2024-3-13 13:58
抱歉,我的意思是用ParallelMap替换/@,我的代码错误,已更正

文档说 ParallelMap 比 Map 更快。
  1. pr[n_]:=DeleteCases[ParallelMap[If[PrimeQ[#]&&PrimeQ[n-#],{#,n-#},0]&,Range[3,IntegerPart[n/2],2]],0]
  2. m=1000000;
  3. Length[pr[m]]
复制代码

9

主题

348

回帖

2806

积分

积分
2806

显示全部楼层

睡神 发表于 2024-3-13 22:15

为啥第一个我运行时是这样子的?电脑问题,还是版本问题?而第二个运算效率不算高,用时3分多钟
图片1.png
除了不懂,就是装懂

9

主题

348

回帖

2806

积分

积分
2806

显示全部楼层

睡神 发表于 2024-3-13 22:18
hbghlyj 发表于 2024-3-13 22:07
文档说 ParallelMap 比 Map 更快。

是不是我的版本问题?
图片1.png

点评

额~现在才出结果...  发表于 2024-3-13 22:20
除了不懂,就是装懂

3149

主题

8386

回帖

6万

积分

$\style{scale:11;fill:#eff}꩜$

积分
65391
QQ

显示全部楼层

hbghlyj 发表于 2024-3-13 22:43
睡神 发表于 2024-3-13 14:18
是不是我的版本问题?

有没有可能pr没清除
Clear[pr]

9

主题

348

回帖

2806

积分

积分
2806

显示全部楼层

睡神 发表于 2024-3-13 23:26
hbghlyj 发表于 2024-3-13 22:43
有没有可能pr没清除
Clear[pr]


对的,没Clean[pr]。代码如下:
Clear[pr]
pr[n_] := DeleteCases[ParallelMap[If[PrimeQ[#] && PrimeQ[n - #], {#, n - #}, 0] &, Range[3, IntegerPart[n/2], 2]], 0]
m = 10000000;
Length[pr[m]]
约3.45s出结果,我的那个约5.45s出结果,效率提升了很多

点评

m=100000000时,效率得到显著的提高,51s→22.45s  发表于 2024-3-13 23:31
除了不懂,就是装懂

3149

主题

8386

回帖

6万

积分

$\style{scale:11;fill:#eff}꩜$

积分
65391
QQ

显示全部楼层

hbghlyj 发表于 2024-3-14 00:09
睡神 发表于 2024-3-13 15:26
对的,没Clean[pr]。

是不是拼写错误,好像是Clear[]而不是Clean[]

点评

是的,第一句拼写错了,后面代码拼写没错...原谅我的英语太烂...  发表于 2024-3-14 01:37

手机版|悠闲数学娱乐论坛(第3版)

GMT+8, 2025-3-4 12:26

Powered by Discuz!

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