当前位置:  开发笔记 > 开发工具 > 正文

在Mathematica找到大质数

如何解决《在Mathematica找到大质数》经验,为你挑选了1个好方法。

我对Mathematica很新,我试图找到只能使用数字0,1,2和3编写的大素数,这些数字中有一半以上必须为0.例如,100003符合条件.

如果使用"If"语句,我正在考虑使用Prime [n]函数,但我想知道是否有更有效的方法来解决这个问题.提前致谢.



1> High Perform..:

如果有一个好的答案,可以在http://mathematica.stackexchange.com上提出这个问题

有关各种答案,请继续阅读......

功能

myTestQ[num_Integer] := 
   And[DigitCount[num][[10]] > Plus @@ DigitCount[num][[1 ;; 3]], PrimeQ[num]]

True当它传递一个整数时返回,其中(i)具有01s,2s和3s 更多的数字,并且(ii)是素数. And按顺序和短路评估其参数,因此应避免测试数字计数不正确的数字的素数.

在实践中,你的计算时间将由素性测试主导; 使用错误的数字计数生成和丢弃大量的整数是足够便宜的,你可以忽略程序中那部分的低效率.

现在测试一组仅由0,1,2,3数字组成的整数.有一整个整数族只使用那些数字,即用base-4写的所有整数.所以让我们生成:

IntegerString[Range[lo, hi, 2], 4]

这将生成表示从lo-th到hi-th的所有base-4整数的字符串,步长为2(您不会对任何偶数编号感兴趣).例如

IntegerString[Range[1, 13, 2], 4]

产生

{"1", "3", "11", "13", "21", "23", "31"}

也就是说,字符串形式的第1,第3,第5,......,第13个base-4数字.当然,你需要它们作为整数来测试它们,我们将用ToExpression它.

将它们混合在一起就可以得到类似的东西

Select[ToExpression[IntegerString[Range[lo, hi, 2], 4]], myTestQ]

替换lohi任何你喜欢的,但确保lo是一个奇数.

推荐阅读
135369一生真爱_890
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有